您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“git如何修改歷史記錄”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
方法:1、用“git commit --amend”命令修改一次歷史記錄;2、用“git rebase -i 指定提交號(hào)”命令修改多條歷史記錄;3、用“git filter-branch --filer 命令 修改的范圍”命令重寫(xiě)歷史記錄。
本文操作環(huán)境:Windows10系統(tǒng)、Git2.30.0版、Dell G3電腦。
git怎樣修改歷史記錄
初級(jí)選手 git amend
如果僅僅是在提交之后發(fā)現(xiàn)自己手殘了,用git commit --amend就可以修改剛才的那一次提交。該命令在執(zhí)行以后,會(huì)將剛剛的那一次提交從當(dāng)前分支移除,把工作空間恢復(fù)到上次準(zhǔn)備提交的狀態(tài)(同時(shí)混合了上次提交之后的更改),然后顯示出一個(gè) vim 的界面讓你去修改上次的提交信息。在vim 中保存后,就會(huì)把當(dāng)前的所有修改一并用新的提交信息提交了。
該命令僅僅可以修改最后一次提交,一個(gè)命令相當(dāng)于執(zhí)行了如下一系列動(dòng)作:
$ORIG_HEAD=`git show`#保存當(dāng)前的這次提交的 commit 號(hào) $git reset --soft HEAD^#回到最后一次提交準(zhǔn)備提交前的狀態(tài) $...#做一些操作和修改 $git commit -c $ORIG_HEAD#表示用最后一次提交的提交信息來(lái)做為提交信息,不過(guò)會(huì)調(diào)出編輯器界面
中級(jí)選手 git rebase
前面的git commit --amend僅僅可以修改最后一次提交,但是當(dāng)自己一時(shí)興起,手殘了一路時(shí),這個(gè)命令就無(wú)法拯救我們了,這個(gè)時(shí)候我們就要祭出git rebase -i 這個(gè)大殺器來(lái)幫我們修改那些不堪回首的往事。
實(shí)際上,git rebase -i并不是一個(gè)專門(mén)用來(lái)修改歷史記錄的命令,而是一個(gè)讓我們可以交互式(就是一個(gè)個(gè)來(lái)) 進(jìn)行衍合操作的命令,不過(guò)我們可以用這個(gè)命令來(lái)實(shí)現(xiàn)對(duì)于提交歷史的修改。
該命令的使用方法是git rebase -i <指定提交號(hào)>,比如可以用git rebase -i HEAD~3來(lái)修改本次提交、上次提交、上上次提交共三次提交。
這是一個(gè) vim 編輯器的界面,這里是讓我們編輯這一段腳本,可以使用的命令有下方注釋中的六個(gè)命令。當(dāng)退出當(dāng)前編輯其的頁(yè)面后,git 就會(huì)根據(jù)這個(gè)腳本一個(gè)個(gè)的針對(duì)提交執(zhí)行對(duì)應(yīng)的操作(從最早的那次提交開(kāi)始執(zhí)行)。
如果僅僅是想修改提交信息,就把所有的 pick 改成 r ,然后:wq保存,接下來(lái) git 就會(huì)讓你一個(gè)個(gè)的從最早的提交信息開(kāi)始修改。
剩余的命令中, e 是會(huì)在修改對(duì)應(yīng)提交時(shí)跳出 vim 編輯器,此時(shí) HEAD 指針指向這次提交,此時(shí)可以用git commit --amend對(duì)這次提交進(jìn)行各種修改,然后執(zhí)行 git rebase --continue就會(huì)繼續(xù)下一次操作;s 則是會(huì)在修改對(duì)應(yīng)提交的時(shí)候把這次的提交和其父提交合并為一次提交;f 是和s類似但是會(huì)忽略當(dāng)前提交的信息,直接采用父提交的信息;x 是需要在 x 之后輸入命令然后在 HEAD 指向這次提交的時(shí)候執(zhí)行。利用這些命令還可以完成重排提交、拆分提交的動(dòng)作。
終極殺手 git filter-branch
假如說(shuō)我們提交了 N 多次以后,突然發(fā)現(xiàn)我們這些提交的郵箱都寫(xiě)錯(cuò)了(╯°□°)╯︵ ┻━┻,這個(gè)時(shí)候如果使用之前提到的命令,估計(jì)還沒(méi)改完就要累死了。這個(gè)時(shí)候我們就可以使用git filter-branch來(lái)重寫(xiě)分支,其可以批量的對(duì)每個(gè)提交執(zhí)行我們預(yù)設(shè)的操作。
git filter-branch命令使用的基本使用格式是git filter-branch --<各種filer> '命令' <修改的范圍> ,不同的 filter 會(huì)提供給命令不同的輸入和輸出。比如,--msg-filter表示修改提交信息,原提交信息從標(biāo)準(zhǔn)輸入讀入,新提交信息輸出到標(biāo)準(zhǔn)輸出;--tree-filter表示修改文件列表等等。最后會(huì)有一個(gè)重寫(xiě)的范圍。比如,git filter-branch --env-filter 'GIT_AUTHOR_EMAIL=john@example.com export GIT_AUTHOR_EMAIL' HEAD 就可以用來(lái)重寫(xiě)郵箱。建議在調(diào)用命令之前先啦出一個(gè)分支做嘗試再在自己要修改的分支上執(zhí)行操作。
“git如何修改歷史記錄”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。