小編給大家分享一下如何修改git之前的歷史記錄,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
目前創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、阿巴嘎網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
有的時候我們會突然發(fā)現(xiàn)某個地方需要修改,最常見的某個不應(yīng)該被提交的文件被提交了進來。我們希望它不只是在后續(xù)的版本當中不再出現(xiàn),而是希望整個從git倉庫當中移除掉。這個時候我們就需要修改git之前的歷史記錄。這個時候應(yīng)該怎么辦呢?
不要著急,git當中有很多的手段可以修改之前的歷史提交記錄。
修改最后一次提交
這一點我們在之前的文章當中曾經(jīng)提到過,如果我們只是想要修改最后一次的提交記錄,這是比較簡單的。我們只需要直接修改我們想要修改的部分,在提交的時候加上一個參數(shù)--amend即可。
git commit --amend
amend的意思是補丁,它可以把我們這一次的修改合并到上一條歷史記錄當中,而不會產(chǎn)生一個新的commit記錄。運行之后,它會打開一個vim編輯器,我們還可以修改上一次commit時輸入的提示信息。

我們使用git log檢查的話,會發(fā)現(xiàn)歷史記錄的修改時間還是上一次的時間。看起來就好像什么也沒有發(fā)生過一樣,悄無聲息地就改掉了。

修改多個信息
--amend雖然好用,但是它只能修改最后一次的提交信息,如果我們想要修改的提交記錄在那之前,我們應(yīng)該怎么辦呢?
git當中并沒有提供直接的工具來實現(xiàn)這一點,不過我們可以使用rebase來達成。我們可以加上-i進行交互式地變基,我們可以在任何想要的修改完成之后停止,也可以添加文件或者是做其他想要做的事情。但是我們變基的目標不是某一個分支而是當前分支的某一個歷史節(jié)點,所以我們需要提供一個具體的commitid或者是指針位置。
git rebase -i的功能非常強大,我們幾乎可以使用它來完成所有一切我們想要完成的事情。
比如我們想要修改倒數(shù)第二次提交,我們可以執(zhí)行g(shù)it rebase -i HEAD~3。也就是以倒數(shù)第三個節(jié)點作為基準節(jié)點執(zhí)行變基,這時候git會進入一個vim窗口,在這個窗口當中我們可以看到最近的三次提交記錄。

首先我們可以看到上面的三行就是我們可以修改的三個commit,分別展示的是要執(zhí)行的操作以及commitid以及commit message。這里的操作默認的是pick,也就是使用該commit。關(guān)于我們可以執(zhí)行的操作git在下方也給了充分的提示,其中比較常用的有pick、edit以及squash。
這一次我們想要做的是修改提交記錄,所以我們應(yīng)該執(zhí)行edit,我們把想要修改的commit前的pick改成edit。比如這樣:

退出之后,git會自動帶我們回到我們選擇edit的分支提交之后的版本。我們進行我們想要的修改,這里我在第15篇文章當中加上了一行:嘗試rebase。之后再使用git add以及git commit --amend進行修改提交結(jié)果。

再之后我們執(zhí)行g(shù)it rebase --continue,把剩下要應(yīng)用的變更應(yīng)用完成。

一切都結(jié)束之后,我們可以使用一下git show命令查看一下我們修改的bee9ce3這個commit的記錄。可以看到已經(jīng)多了這一行,說明我們的修改成功了。

順序變更、合并、拆分
順序變更
我們不僅可以修改某一次commit當中的內(nèi)容,還可以修改這些commit的相對順序,以及可以讓它們合并以及拆分。
修改順序其實很簡單,我們只需要人為地修改rebase -i之后彈出的vim文件即可。比如說原本的記錄是:
pick A change A pick B change B pick C change C
如果我們想要更換順序,我們只需要修改這個文件即可。比如變成:
pick B change B pick A change A pick C change C
那么當我們在退出vim的時候,git會首先應(yīng)用B commit的變更,再應(yīng)用A最后應(yīng)用C。
合并
除此之外,我們還可以合并多個commit記錄成一個。操作的方法也很簡單,就是我們只需要把pick修改成squash。git會自動把所有squash的commit記錄合并在一起。
pick A change A squash B change B squash C change
拆分
有的時候一個commit非常巨大,我們可能也會想要將它拆分,其實操作也很簡單。比如我們想要把commit B拆分成兩條,首先,我們在rebase的時候?qū)ommit B前面的pick修改成edit。
pick A change A edit B change B pick C change C
當我們退出的時候,我們會進入到B commit剛剛提交完的狀態(tài)。由于我們要做的是拆分B這個提交,所以我們需要執(zhí)行g(shù)it reset HEAD^,把上一次提交重置。然后再分別add我們想要拆分開來提交的文件。
整個操作如下:
git reset HEAD^ git add test/* git ci -m 'add test' git add code/* git ci -m 'update code' git rebase --continue
這樣我們就把commit B拆分成了兩個commit插入到了歷史記錄當中了。
最后的最后,大家需要注意,雖然這些手段在修改記錄的時候非常好用。但是如果這些commit已經(jīng)被提交到了遠程,我們是不可以直接git push同步的。因為git會校驗我們提交的hash值,發(fā)現(xiàn)對不上之后會禁止我們的提交。所以如果想要提交到遠程的話,只能使用git push -f強制覆蓋。但是這是一個非常非常危險的操作,如果你git push -f了,沒有人會知道你到底修改了什么,只建議在自己獨有的分支上如此操作,一定一定要謹慎使用。
以上是“如何修改git之前的歷史記錄”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當前標題:如何修改git之前的歷史記錄
網(wǎng)站路徑:http://www.chinadenli.net/article32/iiegpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、建站公司、定制網(wǎng)站、自適應(yīng)網(wǎng)站、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)