目录
2.1、reset –hard:重置暂存区和工作目录中的内容
2.2、reset --soft:保留工作目录和暂存区中的内容,并把重置HEAD所带来的差异放入暂存区
2.3、reset –mixed(不加参数默认为mixed):保留工作目录,清空暂存区,同时将暂存区中的内容以及重置HEAD所带来的差异放入工作目录中。
1、git提交流程
1.1 正常提交流程
(1)、拉取两套代码,一套用于自己平时的修改(for_work),另外一套用于提交(for_commit)。
(2)、当在for_work目录代码修改完成,功能验证正确以后,使用如下命令:
git stauts 1>log/change.log 2>&1
使用notepad++搜索.h/.c/.cpp查看对哪些文件进行了修改,把文件的路径记录下来。
(3)、打开for_commit目录,使用git pull将代码更新到最新版本。
(4)、使用Beyond Compare同时打开for_work和for_commit中被修改的文件。Beyond Compare对两个文件进行对比,有差异的代码会用红色字体标出。
(5)、在for_work目录下使用git diff命令,查看工作目录中修改的地方。结合Beyond Compare可以快速对比出自己修改的部分,然后使用箭头把修改部分添加到for_commit中。
(6)、等到把所有文件都修改完毕后,在for_commit中使用git diff查看修该的内容。与for_work中的进行对比。(第一次验证)
(7)、在for_commit中使用git add把修改的文件加入暂存区。
(8)、编译指定的子项目,验证修改的功能是否正确。
(9)、如若功能正确,在for_commit中使用git diff --cached再一次验证修改的内容。
(10)、使用git commit提交本次代码
(11)、git push
例如:git push origin HEAD:refs/for/master%r=developer2,r=reviewer1,cc=lijingbei
(11.1)、master要修改为当前的分支
(11.2)、r代表审查者(软件经理、科长(wuqibing)、小组长(xuegang))
1.2 冲突解决
提交完成后,如若在gerrit中看到Merge Confilct则代表本次的提交有冲突,点击
ABANDON 按钮将其放弃掉。
解决步骤:
(1)、使用git status 查看有哪些冲突文件,记录一下有冲突文件的名称以及文件的位置。
(2)、使用vim进入到有冲突的文件中,查看冲突的位置。对冲突的地方进行合并。
(3)、使用git add命令把解决完冲突的文件加入暂存区。
(4)、使用git log查看提交记录,记录有冲突的commit节点前一个commit ID
(5)、使用git reset --soft <commit ID>回退到有冲突commit节点的上一次节点
(6)、重新使用git commit 重新提交
(7)、git push 重新提交到仓库
gitk:可以查看提交的历史LOG,值得研究。
git log:可以查看提交的历史
git show <commitid>:可以查看本次提交的具体内容。
2、git reset命令
适用场景:使用Git的commit命令提交代码后,发现本次的提交有错误的内容。此时有2种解决的办法:
(1)、修改错误的内容,重新提交一次。
(2)、使用git reset命令撤销此次的错误提交。
但第一种方法,会有一个明显的弊端,那就是会在记录中留下一次错误的版本。
git reset 的三种模式分别为:
git reset --hard
git reset –soft
git reset –mixed(默认)
2.1、reset –hard:重置暂存区和工作目录中的内容
回滚前:
回滚后:
git reset --hard会在重置HEAD和branch的同时,重置暂存区和工作目录当中的内容。假设你在镜像4的位置使用了git reset --hard命令回滚到了镜像3,那么你的暂存区和工作目录中的内容就会完全重置为和HEAD所指向新位置相同的内容。即:没有commit的修改都会被擦除。
2.2、reset --soft:保留工作目录和暂存区中的内容,并把重置HEAD所带来的差异放入暂存区
重置前:
重置后:
什么是“重置HEAD所带来的差异”?
当从镜像4回滚到镜像3时,原节点镜像4相对于reset目标节点镜像3的变化就是重置HEAD所带来的差异。
2.3、reset –mixed(不加参数默认为mixed):保留工作目录,清空暂存区,同时将暂存区中的内容以及重置HEAD所带来的差异放入工作目录中。
hard、soft和mixed三个参数之间的比较
(假设由节点回滚到了节点
)
方式 | 工作目录(W) | 暂存区(S) | 说明 |
hard | W=0 | S = 0 | 没有commit的内容被完全擦除 |
soft | W不变 | S = S + | |
mixed | W=W + S + | S = 0 |
3、git stash命令的使用
(1)、git stash save "save message":执行存储时,添加备注,方便查找,只使用git stash也可以,但查找时不方便。
(2)、git stash list:查看stash有哪些存储。
(3)、git stash show: (仅显示改动的文件名)显示做了哪些改动,默认show第一个存储,如果要显示其他存储,后面加stash@{$num},比如显示第二个:
git stash show stash@{1}
(4)、git stash show -p : (显示改动的详细内容)显示第一个存储的改动,如果想显示其他存储改动,命令 git stash show stash@{$num} -p,比如显示第二个:
git stash show stash@{1} -p
(5)、git stash apply:应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他的,git stash apply stash@{$num},比如应用第二个:
git stash apply stash@{1}
(6)、git stash pop: 恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令: git stash pop stash@{$num},比如应用并删除第二个:
git stash pop stash@{1}
(7)、git stash drop stash@{$num}:丢弃stash@{$num}存储,并从列表中删除这个存储。
(8)、git stash clear:删除所有缓存的stash。
说明:新增文件,直接执行stash命令是不会被存储的。