Git本地常用指令
- Git是当下流行的开源分布式版本控制工具,被广泛应用于软件开发中
1.1 设置签名(git config)
- 用于标识开发人员的身份,签名按照作用范围可以分为两类,一类指只作用于当前项目,被称为项目级别(仓库级别)签名;另一类可作用于当前用户管理的所有项目,可以成为系统用户级别签名。级别的优先级采取就近原则,必须设置签名
- 签名中的用户名和邮箱信息只是用于标识开发人员,不具备远程连接功能
1.1.1 项目级别/仓库级别
//用户名
git config user.name 具体名称 (如:git config user.name peter)
//邮箱,使用不存在的邮箱也不会影响git的使用,因为git不会检测邮箱的正确性。
//但是在多人协作中,最好使用常用邮箱,以便合作伙伴之间的及时沟通
git config user.email 具体邮箱 (如:git config user.email peter@123.com)
可以在项目文件中的.git/文件中的config文件内,使用cat config
指令即可查看项目范围的签名相关信息,如下图
1.1.2 系统用户级别
全局范围签名的设置指令,只需要在项目范围签名设置指令中加入–global关键字就可以了。
//用户名
git config --global user.name 具体名称 (如:git config user.name peter)
//邮箱
git config --global user.email 具体邮箱 (如:git config user.email peter@123.com)
全局范围的签名信息,在操作系统的家目录中。以win10为例。
- 使用cd ~指令即可进入win10的家目录中
- 使用
ls -lA
(因为.gitconfig文件为隐藏文件,只有使用ls -lA
指令才能被看到)指令查看家目录中的文件
- 使用cat .gitconfig即可查看.gitconfig中的内容。可以看到当前的全局范围的签名信息
1.2 初始化本地仓库(git init)
-
在运行git init指令的目录下新建一个git仓库,即在该目录创建一个.git/目录,内含与本地库相关的子目录和文件
-
如果该目录下已经存在一个git仓库,那么该指令则会重新初始化该仓库,而不会新建一个git仓库
1.3 查看状态以及添加提交(git status、git add与git commit)
- 工作区、缓存区与本地库都为空;No commits yes对应本地库,nothing to commit…对应缓存区,工作区中的文件可以使用
ls
指令查看
-
工作区中存在未被追踪(未被添加到缓冲区)的文件,文件名被标记为红色
-
使用
git add [目标文件名]
添加文件到缓存区,命令行显示的警告信息与安装git时的设置有关
- 缓存区中存在被追踪的文件,文件名被标记为绿色,且被new file关键字修饰
-
使用
git commit [被追踪文件名]
,在设置完描述信息(用户对文件更新的描述信息,必须要有)后,完成文件的提交;也可使用git commit -m "描述信息" [被追踪的文件名]
直接完成文件的提交,如果 -m后的描述信息为空,那么git会将该文件的文件名作为描述信息,提交到本地库-
进入到设置描述信息界面
-
设置完描述信息后,文件被自动提交到本地库
-
-
查看缓存区和本地库中有文件时的状态
1.4 查看历史版本(git log)
- git log指令可以列出当前分支的所有版本的历史信息
1.4.1 git log 查看完整的历史版本
- 历史版本信息的组织格式:
- 黄色标记的commit后的一串哈希值,最后的括号中的内容为当前分支信息和文件的当前版本
- Author为编辑这条历史的用户信息
- Date为编辑这条历史信息的日期
- 最后的那一行是使用
git commit
提交时,用户留下的描述信息
1.4.2 git log --pretty=oneline 将历史信息用一行表示,哈希值不缩减
1.4.3 git log --oneline 将历史信息用一行表示,并且缩减哈希值
- 注意:上面的几种显示历史信息的指令,在回退版本时,会省略这个版本之后的版本
1.4.4 git reflog 简略地显示历史信息,并提供各个版本历史信息距离当前版本的距离
- HEAD@{移动到当前版本需要的步数}
1.4.5 git log --follow[文件名]
- 展示某个文件的记录
1.5 控制版本的前进与后退(git reset)
- git可以通过移动HEAD指针控制版本的前进与后退
- git reset可以使用的三个参数
- –hard:在本地库移动HEAD指针后,重置暂存区和工作区
- –mixed:在本地库移动HEAD指针后,重置暂存区
- –soft:仅在本地库移动HEAD指针
1.5.1 基于索引值(哈希值)操作
git reset --hard [哈希值(全部、部分均可)]
1.5.2 基于后退符号(^与~)
git reset --hard HEAD^^...
(根据后退符的个数进行版本的后退操作)
git reset --hard HEAD~
[要后退的步数],做多步后退时,比^符简洁
1.6 文件删除与找回(rm)
1.6.1 删除文件
- rm [要删除的文件];注意:采用以下方式删除的文件是已经被提交到git本地库的文件
- 使用git add 与 git commit指令将删除操作提交到本地库
1.6.2 找回被删除的文件
-
git找回被删除文件的实质就是将版本回滚到删除操作的记录前,所以删除前文件存在的状态必须被提交到本地库,否则无法使用以下方法进行文件找回,git中文件删除有两种情况:
- 删除操作被提交到本地库:使用
git reset --hard [删除前的记录索引]
- 删除操作被提交到本地库:使用
- 删除操作仅被提交到缓存区,即删除操作没有被提交到本地库的日志中:使用
git reset --hard HEAD
即可
1.7 比较指令(git diff)
- 在更新文件前,最好比较一下当前文件版本(本地库/暂存区中的记录版本)与更新后版本的差异(工作区中的文件版本)
1.7.1 工作区与暂存区的同名文件比较
git diff [文件名]
(同名文件存在于工作区与暂存区中,将工作区中的文件加入到暂存区中后,则没有差异可以显示)- 工作区中的文件没有加入到暂存区
- 工作区中的文件加入到暂存区后
1.7.2 工作区、暂存区与本地库中的某个版本进行比较
git diff HEAD [索引值/^/~] [文件名]
1.7. 3 比较多个文件
- 在上述两种方法中,不加文件名即可
git diff
:比较工作区与缓存区中的文件git diff HEAD [索引值/^/~]
:比较工作区/暂存区与本地库中的文件
1.8 分支操作
- 实现同时进行多个模块的开发,且相互对立
- 实现热修复,在不影响项目运行的前提下进行项目的维护
- 所有分支间共享工作区与暂存区;本地库相互独立,通过合并操作统一
1.8.1 创建与查看分支
git branch
-v: 查看分支,分支名前有星号和绿色标记的分支名表示当前分支git branch [分支名]
: 创建分支,将主分支(master)的本地库拷贝一份到一个新的分支本地库
1.8.2 分支切换
git checkout + [分支名]
: 从一个分支移动到另一个分支
1.8.3 分支合并
git merge [目标分支名]
: 将目标分支的本地库的合并到当前分支的本地库
1.8.4 解决冲突
- git默认项目的各个分支同时进行推进,不同分支之间不会相互干预,所以在两个甚至多个分支对项目的相同部分进行修改并提交到各自的本地库后,git把该部分内容的决定权交给开发人员,由开发人员进行冲突的处理,git只是给出相应的提示与标记员
冲突解决的步骤:
- 打开发生冲突的文件:
- 删除git生成的标记:
- 提交更改后的文件(冲突解决后文件提交可以不加文件名):