git基本命令的理解
本文适合git命令初学者和对git不是很熟悉的读者阅读。
本文包括git各种基本概念的讲解,git常见流程,异常流程,回溯方法,冲突处理的方法。
1 git含义理解图
2 git基本流程图
在项目中一般会有一个master主分支,和很多版本分支,比如version1.0,2.1等。自己会在某个版本上进行开发。
1克隆到本地分支git clone xxx
后默认是master分支;
2 首先要通过git branch version2.1
切换到自己的工作分支,git branch -a
可以查看所有分支。
因为版本分支一般不可以直接push,需要管理员确认,所以我们要在这个基础上建立自己的分支git branch -b myNewBranch
。(这一步人们往往会忘记,后面有处理方法)
3 在自己的工作区写代码,可能经历很长时间。
4 git add 修改的文件名
,只是为修改的文件增加索引,也就是说明哪些是要提交的内容,此时你所修改的文件也只有在工作区一份。
5 git commit -m "此次修改的备注信息"
,将工作区的代码保存到本地仓库,此时代码才相对安全。
注意:修改代码后,没有git commit -m之前,切换分支会导致工作区代码和目标分支代码自动合并,有冲突会切换分支失败(切换分支失败,后面有处理方法),切换分支时暂存区会内容不变。
6 git pull origin version2.1
重新拉远程的2.1分支,因为修改代码时其他人可能修改远程分支,需要确认是否存在冲突。
6.1 如果编辑存在冲突的文件,用git status
中unmerge状态的文件就是冲突文件,vim打开后>>>>>
和=====
和<<<<<
中间就是冲突部分。再重新执行4、5过程。
7 git push origin myNewBranch
提交到远程自己的分支,后期合并需要管理员确认。
个人开发的过程只需要1、3、4、5、7。
多人小项目无管理员(自己可以有权限push到版本分支),则无需2过程中git checkout -b
新建自己的分支,第7步中直接提交到版本分支即可,其他都一样。
3 忘记新建分支的处理方法
只有在6.1过程后4过程之前,是不能git checkout -b
的。其他任何时候都可以新建自己的分支。
4 本地切换分支出现冲突
情况一:需要原分支不需要修改,目标分支需要修改。
1 需要先将冲突文件git add filename && git stash save filename
到存放区。此时存放区有真正修改的文件。
2 切换分支git checkout branchName
。
3 查看存放目录git stash list
,找到索引index
,git stash pop [email protected]{index}
。
4 然后通过编辑解决冲突即可。
情况二:原分支需要修改,目标分支不需要修改。
1 git add filename
,git commit -m "备注信息"
。
2 切换分支git checkout branchName
。
情况三:不再需要修改的代码。
1 需要先将冲突文件git add filename && git stash save filename
到存放区。
2 切换分支git checkout branchName
。
3 查看存放目录git stash list
,找到索引index
,git stash pop [email protected]{index}
。
或者直接git stash clear
。
情况四:两个分支都需要代码。
可以根据情况一和二来解决。
5 回溯
先用git log
查看commit的hash值
。
git reset --soft hash值
只是修改head的指向,不修改其他区域。
git reset --mix(默认选项)hash值
是修改head的指向,且清空暂存区。
git reset --hard hash值
是修改head的指向,清空暂存区,更改工作区代码,工作区代码会消失。
如果git reset --hard hash值
后想要找回,通过git reflog
可以查找最后一次commit的hash值
,再通过git reset --hard hash值
,只能找回到最后一次commit的代码。