Git提交錯了不用慌,這三招幫你修改記錄

2022-01-10 20:24:32 字數 2883 閱讀 3756

有的時候我們會突然發現某個地方需要修改,最常見的某個不應該被提交的檔案被提交了進來。我們希望它不只是在後序的版本當中不再出現,而是希望整個從git倉庫當中移除掉。這個時候我們就需要修改git之前的歷史記錄。這個時候應該怎麼辦呢?

不要著急,git當中有很多的手段可以修改之前的歷史提交記錄。

這一點我們在之前的文章當中曾經提到過,如果我們只是想要修改最後一次的提交記錄,這是比較簡單的。我們只需要直接修改我們想要修改的部分,在提交的時候加上乙個引數--amend即可。

git commit --amend

amend的意思是補丁,它可以把我們這一次的修改合併到上一條歷史記錄當中,而不會產生乙個新的commit記錄。執行之後,它會開啟乙個vim編輯器,我們還可以修改上一次commit時輸入的提示資訊。

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

--amend雖然好用,但是它只能修改最後一次的提交資訊,如果我們想要修改的提交記錄在那之前,我們應該怎麼辦呢?

git當中並沒有提供直接的工具來實現這一點,不過我們可以使用rebase來達成。我們可以加上-i進行互動式地變基,我們可以在任何想要的修改完成之後停止,也可以新增檔案或者是做其他想要做的事情。但是我們變基的目標不是某乙個分支而是當前分支的某乙個歷史節點,所以我們需要提供乙個具體的commitid或者是指標位置

git rebase -i的功能非常強大,我們幾乎可以使用它來完成所有一切我們想要完成的事情。

比如我們想要修改倒數第二次提交,我們可以執行git rebase -i head~3。也就是以倒數第三個節點作為基準節點執行變基,這時候git會進入乙個vim視窗,在這個視窗當中我們可以看到最近的三次提交記錄。

這一次我們想要做的是修改提交記錄,所以我們應該執行edit,我們把想要修改的commit前的pick改成edit。比如這樣:

再之後我們執行git rebase --continue,把剩下要應用的變更應用完成。

一切都結束之後,我們可以使用一下git show命令檢視一下我們修改的bee9ce3這個commit的記錄。可以看到已經多了這一行,說明我們的修改成功了。

我們不僅可以修改某一次commit當中的內容,還可以修改這些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會首先應用b commit的變更,再應用a最後應用c。

除此之外,我們還可以合併多個commit記錄成乙個。操作的方法也很簡單,就是我們只需要把pick修改成squash。git會自動把所有squash的commit記錄合併在一起。

pick a change a

squash b change b

squash c change c

有的時候乙個commit非常巨大,我們可能也會想要將它拆分,其實操作也很簡單。比如我們想要把commit b拆分成兩條,首先,我們在rebase的時候將commit b前面的pick修改成edit。

pick a change a

edit b change b

pick c change c

當我們退出的時候,我們會進入到b commit剛剛提交完的狀態。由於我們要做的是拆分b這個提交,所以我們需要執行git 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已經被提交到了遠端,我們是不可以直接git push同步的。因為git會校驗我們提交的hash值,發現對不上之後會禁止我們的提交。所以如果想要提交到遠端的話,只能使用git push -f強制覆蓋。但是這是乙個非常非常危險的操作,如果你git push -f了,沒有人會知道你到底修改了什麼,只建議在自己獨有的分支上如此操作,一定一定要謹慎使用。

Git提交錯誤後如何回退

git reset commit 在使用git的時候需要維護乙個自己的分支模型,推薦使用 總體說來有一下兩點 下面這個是我們專案中的網路提交圖 這只是簡單介說了一下分支模型,具體的介紹可以參考上面給出的鏈結。如果在提交的過程中直接在master上做了修改,或者不小心把master合併到了develo...

SVN 命令提交錯誤

svn commit svn commit failed details follow svn could not use external editor to fetch log message consider setting the svn editor environment variabl...

post提交錯誤處理

post user add addequipmentjson,function data json error function get window.global.domainrest,function data error function xhr,errortext,errortype aja...