久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何修改git之前的歷史記錄

171次閱讀
沒有評論

共計 2450 個字符,預計需要花費 7 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下如何修改 git 之前的歷史記錄,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

有的時候我們會突然發現某個地方需要修改,最常見的某個不應該被提交的文件被提交了進來。我們希望它不只是在后續的版本當中不再出現,而是希望整個從 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 窗口,在這個窗口當中我們可以看到最近的三次提交記錄。

首先我們可以看到上面的三行就是我們可以修改的三個 commit,分別展示的是要執行的操作以及 commitid 以及 commit  message。這里的操作默認的是 pick,也就是使用該 commit。關于我們可以執行的操作 git 在下方也給了充分的提示,其中比較常用的有 pick、edit 以及 squash。

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

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

再之后我們執行 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

拆分

有的時候一個 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 之前的歷史記錄”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計2450字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 乌兰县| 镇康县| 永修县| 准格尔旗| 武乡县| 聂拉木县| 盘山县| 宁化县| 闽侯县| 荆门市| 文昌市| 连州市| 庆元县| 贡山| 旅游| 新密市| 保靖县| 巨野县| 土默特左旗| 天门市| 丹寨县| 渝中区| 泉州市| 武山县| 久治县| 清苑县| 砚山县| 梨树县| 辽中县| 黄冈市| 亚东县| 长春市| 通河县| 平阴县| 南召县| 宝兴县| 罗山县| 皋兰县| 乐安县| 黄浦区| 永嘉县|