適用場(chǎng)景:
比方說(shuō)萄传,你的代碼已經(jīng)提交到git庫(kù)灌砖,leader審核的時(shí)候發(fā)現(xiàn)有個(gè)Java文件代碼有點(diǎn)問(wèn)題刁品,于是讓你修改龄句,通常有2種方法:
方法1:leader 將你提交的所有代碼 abandon掉回论,然后你回去 通過(guò)git reset …將代碼回退到你代碼提交之前的版本,然后你修改出問(wèn)題的Java文件分歇,然后 git add xx.java xxx.java -s -m “Porject : 1.修改bug…”?
最后通過(guò) git push origin HEAD:refs/for/branches
方法2:?
leader不abandon代碼傀蓉,你回去之后,修改出問(wèn)題的Java文件职抡,修改好之后葬燎,git add 該出問(wèn)題.java?
然后 git commit –amend –no-edit,?
最后 git push origin HEAD:refs/for/branches。
當(dāng)我們想要對(duì)上一次的提交進(jìn)行修改時(shí)缚甩,我們可以使用git commit –amend命令谱净。git commit –amend既可以對(duì)上次提交的內(nèi)容進(jìn)行修改,也可以修改提交說(shuō)明擅威。
舉個(gè)例子:
Step1:我們先在工作區(qū)中創(chuàng)建兩個(gè)文件a.txt和b.txt壕探。并且add到暫存區(qū),然后執(zhí)行提交操作:
Step2:此時(shí)我們查看一下我們的提交日志:
可以看到我們的提交日志中顯示最新提交有兩個(gè)文件被改變郊丛。
Step3:此時(shí)我們發(fā)覺(jué)我們忘了創(chuàng)建文件c.txt李请,而我們認(rèn)為c.txt應(yīng)該和a.txt,b.txt一同提交,而且a.txt文件中應(yīng)該有內(nèi)容‘a(chǎn)’厉熟。于是我們?cè)诠ぷ鲄^(qū)中創(chuàng)建c.txt导盅,并add到暫存區(qū)。并且修改a.txt(故意寫(xiě)錯(cuò)語(yǔ)法且沒(méi)有將a.txt的修改add到暫存區(qū)):
Step4:我們查看一下此時(shí)的提交日志揍瑟,可以看到上次的提交0c35a不見(jiàn)了白翻,并且新的提交11225好就是上次提交的修補(bǔ)提交,它就像是在上次提交被無(wú)視了绢片,修改后重新進(jìn)行提交了一樣:
Step5:此時(shí)我們發(fā)現(xiàn)a.txt文件修改沒(méi)有成功嘁字,于是我們還得進(jìn)行一次對(duì)a.txt的修改,將a.txt add到stage杉畜,然后再執(zhí)行一次與上一次類(lèi)似的提交修補(bǔ):
OK了纪蜒,git commit –amend的用法大致就是這樣。
總結(jié):git? commit --amend 相當(dāng)于上次提交錯(cuò)誤的信息被覆蓋了此叠,gitk圖形化界面上看不到上次提交的信息纯续,git log上也看不到之前的信息随珠,而add 后再commit 相當(dāng)于重新加了一個(gè)信息。相當(dāng)于打了個(gè)補(bǔ)垛怼窗看?