git commit --amend命令的详细讲解+实际应用场景

1.问题背景

在学习《Android群英传:神兵利器》中的第二章:版本控制神器——Git时,第60页有一个小节便是“追加修改”,这个命令就是“git commit --amend”。因此博主我想深入了解一下“git commit --amend”命令。

git commit --amend命令的详细讲解+实际应用场景_第1张图片

2.git commit --amend命令的实际应用场景

(1)场景1:作为项目团队的我们,第一次commit提交了“Java代码”,但我们发现代码写错了。于是第二次,修改了“Java代码”,再次add并且commit提交了“修改过后的Java代码”,但是我们发现又忘记提交一个“XML代码”。接着第三次,我们额外add并且commit提交提交了“XML代码”。上面的整个步骤中,本来提交一次没有错误的话就是多出一个分支,现在出现了2次错误的话就多出了三个分支,多添加的两个错误分支在我们的Git时间轴中是冗余无用的,会增加我们对整个项目Git时间轴进行理解的成本,所以我们有这样一个需求:可以直接删除掉过程中的两个错误分支吗?这就用到了git commit --amend命令。

(2)场景2:我们的代码已经提交到git库,Leader(项目最高权限的负责人)审核我们提交的代码时,发现有个Java文件代码有点问题,于是让我们修改,通常有2种方法:

         (A)方法1:Leader 将我们提交的所有代码 废弃掉,然后我们回去通过git reset …将代码回退到你代码提交之前的版本,然后你修改出问题的Java文件,然后 git add xx.java -s -m “Porject : 1.修改bug…”,最后 git push origin HEAD:refs/for/branches​是

         (B)方法2:leader不废弃我们的代码,我们回去之后,修改出问题的Java文件,修改好之后,git add 该出问题.java,然后 git commit –amend –no-edit, 最后 git push origin HEAD:refs/for/branches

3.git commit --amend命令的代码实践

(1)创建一个新的文件夹“GitCommitAmend”用作我们的测试仓库,创建一个空的TXT文档“a.txt”;再运用git init,git add,git commit -m "First Commit"命令初始化和提交第一版本的项目

git commit --amend命令的详细讲解+实际应用场景_第2张图片

git commit --amend命令的详细讲解+实际应用场景_第3张图片

(2)修改TXT文档“a.txt”(随便写入一段文本,可见下图博主我写入的内容),再次git add,但是提交时我们用 git commit --amend -m "Amend commit with revising the a.txt"

git commit --amend命令的详细讲解+实际应用场景_第4张图片

(3)我们用git log命令,发现log中只有一次提交记录——我们Amend的提交记录,第一次“空的TXT文档'a.txt'”的commit提交记录被“我们Amend的提交记录”给覆盖了。

git commit --amend命令的详细讲解+实际应用场景_第5张图片

结论:如果我们使用平常的git commit -m "something"提交命令是会有两次记录的,而在这里使用git commit --amend -m "something"提交命令就实现了我们最开始的需求“可以直接删除掉过程中的两个错误分支吗?”。如果我们第三次做出修改,并使用git commit --amend -m "something"提交命令,那么git log中也仅仅记录我们最后一次(即第三次)提交的记录。

(4)我们使用git reflog命令(reflog全称reference log),发现两次提交都被记录在案了。如果想跳回第一次的提交,可以使用命令git reset --hard "commit_id",使用完该命令后再次查看a.txt,果然a.txt变空了。

git commit --amend命令的详细讲解+实际应用场景_第6张图片

git commit --amend命令的详细讲解+实际应用场景_第7张图片

4.git commit --amend命令的总结

git  commit --amend 作用主要在于:让“本次Amend Commit的提交”覆盖掉最近一次提交的错误信息。并且gitk图形化界面上看不到被覆盖掉的错误信息记录,git log上也看不到被覆盖掉的错误信息记录。

如果想要查看“覆盖掉最近一次提交的错误信息”,可以使用git log加强版命令git reflog。如果想跳回“被覆盖掉的错误提交”,可以使用命令git reset --hard "commit_id"

你可能感兴趣的:(Git,Github)