GIT版本控制和常用命令使用介绍

GIT版本控制和常用命令使用介绍

  • 1. 版本控制
    • 1.1 历史背景
    • 1.2 什么是版本控制
    • 1.3 常见版本控制工具
    • 1.4 版本控制的分类
  • 2 Git介绍
    • 2.1 Git 工作流程
    • 2.2 基本概念
    • 2.3 文件的四种状态
    • 2.4 忽略文件
    • 2.5 Git命令
      • 2.5.1 查看本地git配置命令
      • 2.5.2 远程库信息查看命令
      • 2.5.3 分支交互命令
      • 2.5.4 标签常用命令
      • 2.5.5 暂存区命令
      • 2.5.6 查看提交历史
      • 2.5.7 gitk

1. 版本控制

1.1 历史背景

同生活中的许多伟大事物一样,Git诞生于一个极富纷争且大举创新的年代。Linux内核开源项目有着为数众广的参与者。

1991-2002年间, 绝大多数的Linux内核维护工作都花在了提交补丁和保存归档的繁琐事务上。

直到2002年,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper来管理和维护代码。

但在2005年,开发BitKeeper的商业公司同Linux内核开源社区的合作关系结束,他们收回了Linux内核社区免费使用BitKeeper的权力。这就迫使Linux开源社区(特别是Linux的缔造者Linus Torvalds)基于使用BitKeeper时的经验教训,开发出自己的版本系统,也就是后来的Git。

Git是目前世界上最先进的分布式版本控制系统,而且是是免费的、开源的,最初Git是为辅助Linux内核开发的,作为一种过渡方案来替代 BitKeeper。

1.2 什么是版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

1.3 常见版本控制工具

主流的版本控制器有如下这些:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN。

Git与SVN最主要的区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的。然而编写代码的时候,使用的是自己的电脑,所以首先要从中央服务器得到最新的版本,然后再编写代码。完成工作后,需要把自己编写的代码推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。编写代码的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

Git是目前世界上最先进的分布式版本控制系统。

1.4 版本控制的分类

  1. 本地版本控制
    记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
    在这里插入图片描述

  2. 集中版本控制
    所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
    在这里插入图片描述
    所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS。

  3. 分布式版本控制
    所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

在这里插入图片描述

2 Git介绍

2.1 Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
    在这里插入图片描述
    可以概括为:
  1. 从远程仓库中克隆Git资源作为本地仓库,同时从本地仓库中checkout代码
  2. 提交代码:提交到暂存区–>提交到本地仓库–>代码push到远程仓库

在这里插入图片描述

  1. 1本地仓库中保存修改的各个历史版本
  2. 代码push到远程仓库,因为需要和团队成员共享代码

2.2 基本概念

  • 工作区:workspace。就是你在电脑里能看到的目录,平时存放项目代码的地方。
  • 暂存区:stage 或 index。用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表的信息。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 本地仓库:Repository。就是安全存放数据的位置,这里面有你提交所有的版本的数据。其中HEAD指向最新放入仓库的版本。
  • 远程仓库:Remote。托管代码的服务器,可以简单的认为是你项目组的一台电脑用于远程数据交换。

在这里插入图片描述
在这里插入图片描述

2.3 文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked:未跟踪。此文件在文件夹中,但没有加入git库,不参与版本控制,通过git add状态变为Staged。
    在这里插入图片描述
  • Unmodify:文件已经入库,未修改,也就是版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,而变为Modified。如果使用git rm 移出版本库,则变成Untracked。
    在这里插入图片描述
  • Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过git add 可进入暂存staged状态。使用git checkout 则丢弃修改过,返回到unmodify 状态,这个git checkout即从库中取出文件,覆盖当前修改。
    在这里插入图片描述
  • Staged:暂存状态。执行git commit 则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify 状态。执行git reset HEAD filename 取消暂存,文件状态为Modified。

在这里插入图片描述

2.4 忽略文件

有时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等,在主目录下建立"gitignore" 文件,此文件有如下规则:

  • 忽略文件中的空行或以#符号开始的行将会被忽略
  • 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2})代表可选的字符串等
  • 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略
  • 如果名称最前面是一个路径分隔符(/),表示要忽略的文件在此目录下
  • 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录
# 											为注释
*.txt										忽略所有 .txt结尾的文件
!lib.txt									但lib.txt除外
/temp										仅忽略项目根目录下的temp文件,不包括其他目录
build/										忽略build/目录下的所有文件
doc/*.txt									忽略 doc/notes/txt 但不包括doc/server.arch.txt

在这里插入图片描述

2.5 Git命令

2.5.1 查看本地git配置命令

#查看全部config
git config -l
#查看系统config
git config --system --list	
#查看当前用户全局config
git config --global --list
#设置用户名
git config --global user.name "[名称]" 
#设置邮箱
git config --global user.email [邮箱] 

2.5.2 远程库信息查看命令

#查看远程库信息 
git remote
#远程库详细信息
git remote -v
#查看远程分支
git branch -rgit branch -a 
#为远程仓库地址创建别名
git  remote add origin  https://github.com/sun766/Programming-art.git(此处举例)
#查看当前别名所对应的远程仓库地址
git  remote show origin
#从远程仓库获取代码(拉取所有版本到本地)
git clone  origin
#删除当前别名所对应的远程仓库地址
git  remote remove origin

2.5.3 分支交互命令

#查看分支 (显示结果中 有* 代表当前所在分支)
git branch 
#创建分支
git branch 分支名称
#建立本地分支和远程分支的关联
git branch –set-upstream branch-name origin/branch-name 
#切换分支(工作区文件内容会立即变化成对应分支的内容 )
git checkout 分支名称
#创建+切换分支,git checkout -b dev,即origin/dev
git checkout -b 分支名称
#更新
git pull
#将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并
git pull origin master:brantest
#远程分支与当前分支合并,冒号后面的部分可以省略
git pull origin master
#将当前分支推送到远程对应的分支(若远程无对应分支,则推送无效) 
git push 
#将分支dev提交到远程origin/dev(远程没有则创建, 远程没有dev则创建) 
git push origin dev 
#如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push
#,不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式
git push -u origin master
#删除分支 (如果分支没有被合并不允许删除)
git  branch -d 分支名称
#删除分支(强制删除分支)
git  branch  -D 分支名称
#合并某分支到当前分支(当前目录主分支,将来源分支合并到主分支上。合并后来源分支仍然存在)
git merge 来源分支
#合并分支(禁用 Fast forward)
git merge –no-ff -m “描述” dev
#查看分支合并情况
git log –graph –pretty=oneline –abbrev-commit

2.5.4 标签常用命令

#创建标签
##对当前版本建立标签 
git tag tagname
##对历史版本建立标签 
git tag tagname commit_id
##commit_id 添加说明 
git tag -a tagname -m “描述…”
##查看所有标签 
git tag
##查看某个标签具体信息
git show tagname

#删除标签
##删除本地标签
git tag -d tagname

#推送标签
##推送本地的某个标签到远程 
git push origin tagname
##一次性推送所有分支
git push origin –tags

2.5.5 暂存区命令

# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
#用暂存区中的文件覆盖工作目录中的文件
git  checkout -- 文件名
#将暂存区中文件删除
git  rm  --cached 文件名
#查看当前的状态
git status	
#提交文件(将暂存区的文件提交到本地git仓库)
git commit -m '添加内容'	
git commit -F ~/gitcommit/gitcommit_bug

2.5.6 查看提交历史

Git 提交历史一般常用两个命令:
git log - 查看历史提交记录。
git blame <file> - 以列表形式查看指定文件的历史修改记录。
  1. git log
--oneline 选项来查看历史记录的简洁的版本
--graph 选项,查看历史中什么时候出现了分支、合并
--reverse 参数来逆向显示所有日志
--author查找指定用户的提交日志    git log --author=Linus
--since/--before 指定日期    git log --oneline --before={3.weeks.ago} --after={2010-04-18}

在这里插入图片描述

  1. git blame < file >
    在这里插入图片描述

2.5.7 gitk

gitk是git图形化的界面软件版本,对仓库的管理更为直观,不需要在命令行中进行繁琐的控制,将各种信息合理的组织在不同的软件窗口中,让一些很繁琐的操作可以在图像软件中只需要一键获得。合理的结合命令行和图形工具可以大大提高软件开发和分支管理的效率。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/188815.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【UGUI】制作用户注册UI界面

这里面主要的操作思想就是 1.打组 同一个事情里面包含两个UI元素都应该打组便于管理和查找 2.设置锚点位置 每次创建一个UI都应该设置他的锚点以便于跟随画布控制自己的&#xff1a;相对位置 3. 设置尺寸&#xff08;像素大小&#xff09; 每一次UI元素哪怕是作为父物体的…

AI和人工智能与机器学习全景报告

今天分享的是AI系列深度研究报告&#xff1a;《AI和人工智能与机器学习全景报告》。 &#xff08;报告出品方&#xff1a;appen&#xff09; 报告共计&#xff1a;30页 获取 数据获取仍是AI应用构建团队的主要瓶颈。 原因各不相同。例如&#xff0c;特定用例的数据可能不足…

【2023 云栖】阿里云田奇铣:大模型驱动 DataWorks 数据开发治理平台智能化升级

云布道师 本文根据 2023 云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;田奇铣 | 阿里云 DataWorks 产品负责人 演讲主题&#xff1a;大模型驱动 DataWorks 数据开发治理平台智能化升级 随着大模型掀起 AI 技术革新浪潮&#xff0c;大数…

nrm安装及使用

一、介绍 nrm 是一个 Node.js 的 registry 管理工具&#xff0c;它允许你快速地在不同的 npm registry 之间进行切换。通过使用 nrm&#xff0c;你可以方便地将 npm 的 registry 切换为淘宝镜像、npm 官方镜像或者其他定制的镜像&#xff0c;以加快包的下载速度。nrm仓库请点击…

leetcode-python刷题集

系列文章目录 记录一下自己的学习过程 文章目录 系列文章目录基础知识链表链表两数相加 回文 11.16罗马数字转换 11.16最长公共前缀 11.16队列 基础知识 链表 节点定义&#xff1a; class Node:def __init__(self,data None, next None):self.data dataself.next next节…

Fedora 36 ARM 镜像源更换与软件安装

1、什么是Fedora Fedora Linux是较具知名度的Linux发行套件之一&#xff0c;由Fedora专案社群开发、红帽公司赞助&#xff0c;目标是建立一套新颖、多功能并且自由的作业系统。 Fedora是商业化的Red Hat Enterprise Linux发行版的上游原始码。 2、Fedora软件安装 64 位 .deb&a…

MyBatisPlus入门介绍

目录 一、MyBatisPlus介绍 润物无声 效率至上 丰富功能 二、Spring集成MyBatisPlus 三、SpringBoot集成MyBatisPlus 一、MyBatisPlus介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c…

2023.11.25更新关于mac开发APP(flutter)的笔记与整理(实机开发一)

我自己写的笔记很杂&#xff0c;下面的笔记是我在chatgpt4的帮助下完成的&#xff0c;希望可以帮到正在踩坑mac开发APP&#xff08;flutter&#xff09;的小伙伴 目标&#xff1a;通过MAC电脑使用flutter框架开发一款适用于苹果手机的一个APP应用 本博客的阅读顺序是&#xf…

brat文本标注工具——安装

目录 一、Linux系统安装 1. centOS系统 2. Ubuntu系统 3. macOS系统 4.说明 二、Google Chrome安装 1. 打开命令行&#xff0c;切换到管理者权限 2. 安装依赖 3. 下载Google浏览器的安装包 4. 安装Google Chrome 三、yum更新 四、Apache安装 安装Apache 启动Apac…

CPU、GPU、TPU内存子系统架构

文章目录 CPU、GPU、TPU内存子系统架构概要CPUGPUTPU共同点和差异&#xff1a; CPU、GPU、TPU内存子系统架构 概要 Memory Subsystem Architecture&#xff0c;图源自TVM CPU CPU&#xff08;中央处理器&#xff09;的内存子系统&#xff1a;隐式管理 主内存&#xff08;…

BUUCTF [SWPU2019]伟大的侦探 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压提示需要密码&#xff0c;但解压出一个密码.txt文件。 密文&#xff1a; 解题思路&#xff1a; 1、打开密码.txt文件&#xff0c;提示如下。 压缩包密码:摂m墷m卪倕ⅲm仈Z 呜呜呜…

Oracle的安装及使用流程

Oracle的安装及使用流程 1.Win10安装Oracle10g 1.1 安装与测试 安装版本&#xff1a; OracleXEUniv10.2.1015.exe 步骤参考&#xff1a;oracleXe下载与安装 安装完成后测试是否正常 # 输入命令连接oracle conn sys as sysdba; # 无密码&#xff0c;直接按回车 # 测试连接的s…

运维高级--centos7源码安装Apache

安装必要的依赖项&#xff1a; sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具&#xff0c;以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

【GPT-3.5】通过python调用ChatGPT API与ChatGPT对话交流

文章目录 一、引言二、AIGC简介三、OpenAI介绍四、GPT-3.5介绍五、获得OpenAI API Key六、调用ChatGPT API实现与ChatGPT对话七、参考链接 一、引言 ChatGPT 的火爆&#xff0c;成功带火了AIGC&#xff0c;让它进入大众的视野。 ChatGPT 和Whisper API 开发者现在可以通过API将…

ctfshow刷题web入门--1--ljcsd

文章目录 ctf.show。信息搜集web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20。爆破。知识1.1 播种随机数生成器-mt_srand。参考web21--重点web22--做不出来web23web24web25web26web27web28。。。命令执行。知识1 绕过正则表达式…

SQL sever2008中的游标

目录 一、游标概述 二、游标的实现 三、优缺点 3.1优点&#xff1a; 3.2缺点&#xff1a; 四、游标类型 4.1静态游标 4.2动态游标 4.3只进游标 4.4键集驱动游标 4.5显示游标&#xff1a; 4.6隐式游标 五、游标基本操作 5.1声明游标 5.1.1.IS0标准语法 5.1.1.1语…

在 Go 中使用 Protocol Buffers

各位准备好了吗&#xff01;这一次&#xff0c;我们将深入探讨 Protocol Buffers&#xff08;protobuf&#xff09;及其在数据序列化中的超能力所在。 介绍 Protocol Buffers&#xff0c;也被称为 protobuf&#xff0c;是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

1.前端--基本概念【2023.11.25】

1.网站与网页 网站是网页集合。 网页是网站中的一“页”&#xff0c;通常是 HTML 格式的文件&#xff0c;它要通过浏览器来阅读。 2.Web的构成 主要包括结构&#xff08;Structure&#xff09; 、表现&#xff08;Presentation&#xff09;和行为&#xff08;Behavior&#xff…

cmake install接口常用方式介绍

cmake install接口常用方式介绍 1 Synopsis2 Introduction2.1 DESTINATION <dir>2.2 PERMISSIONS <permission>...2.3 CONFIGURATIONS <config>...2.4 COMPONENT <component>2.5 EXCLUDE_FROM_ALL2.6 RENAME <name>2.7 OPTIONAL 3 Signatures4 E…

Three.js 3D模型爆炸分解

你是否曾想展示一些很酷的发动机的 3D 模型? 这是一种可行的方法,使用一些非常基本的数学:一个简单的分解视图。 为此,我们将使用 React-Three-Fiber,但它可以与原生 Three.js 配合使用(它与 r3f 生态系统没有深度绑定,只是对我来说迭代速度更快)。 1、准备3D模型 首…