Git
English ▾ 主題 ▾ 最新版本 ▾ git-revert 最後更新於 2.44.0

名稱

git-revert - 還原某些現有的提交

概要

git revert [--[no-]edit] [-n] [-m <parent-number>] [-s] [-S[<keyid>]] <commit>…​
git revert (--continue | --skip | --abort | --quit)

描述

給定一個或多個現有的提交,還原相關修補程式所引入的變更,並記錄一些新的提交來記錄它們。這需要你的工作樹是乾淨的(沒有來自 HEAD 提交的修改)。

注意:git revert 用於記錄一些新的提交,以反轉先前某些提交(通常只有一個錯誤的提交)的效果。如果你想要捨棄工作目錄中所有未提交的變更,你應該查看 git-reset[1],特別是 --hard 選項。如果你想要提取特定檔案,如同它們在另一個提交中的狀態,你應該查看 git-restore[1],特別是 --source 選項。請注意這些替代方案,因為兩者都會捨棄工作目錄中未提交的變更。

請參閱 git[1] 中的「Reset、restore 和 revert」,了解三個命令之間的差異。

選項

<提交>…​

要還原的提交。有關拼寫提交名稱的更完整清單,請參閱 gitrevisions[7]。也可以給定提交集合,但預設情況下不會執行遍歷,請參閱 git-rev-list[1] 及其 --no-walk 選項。

-e
--edit

使用此選項,git revert 會讓你編輯提交訊息,然後再提交還原。如果你從終端機執行命令,這是預設值。

-m 父代編號
--mainline 父代編號

通常你無法還原合併,因為你不知道應該將合併的哪一側視為幹線。此選項指定幹線的父代編號(從 1 開始),並允許還原反轉相對於指定父代的變更。

還原合併提交會宣告你永遠不想要合併帶來的樹狀變更。因此,後續合併只會帶入由非先前還原合併之祖先的提交所引入的樹狀變更。這可能符合或不符合你的需求。

請參閱 revert-a-faulty-merge 操作指南 以取得更多詳細資訊。

--no-edit

使用此選項,git revert 不會啟動提交訊息編輯器。

--cleanup=<模式>

此選項決定提交訊息在傳遞給提交機制之前將如何清理。請參閱 git-commit[1] 以取得更多詳細資訊。特別是,如果 <模式> 的值為 scissors,則在發生衝突的情況下,scissors 將附加到 MERGE_MSG,然後再傳遞。

-n
--no-commit

通常,命令會自動建立一些提交,並附帶說明哪些提交被還原的提交記錄訊息。此旗標會將還原命名提交所需的變更套用到你的工作樹和索引,但不會建立提交。此外,當使用此選項時,你的索引不必與 HEAD 提交相符。還原會根據你的索引的起始狀態執行。

當連續將多個提交的效果還原到你的索引時,此選項很有用。

-S[<金鑰 ID>]
--gpg-sign[=<金鑰 ID>]
--no-gpg-sign

GPG 簽署提交。 keyid 引數是可選的,預設為提交者身分;如果指定,它必須緊接著選項,不加空格。--no-gpg-sign 可用於反駁 commit.gpgSign 配置變數,以及先前的 --gpg-sign

-s
--signoff

在提交訊息的結尾新增 Signed-off-by 尾碼。有關更多資訊,請參閱 git-commit[1] 中的 signoff 選項。

--strategy=<策略>

使用給定的合併策略。應只使用一次。有關詳細資訊,請參閱 git-merge[1] 中的合併策略區段。

-X<選項>
--strategy-option=<選項>

將合併策略特定的選項傳遞給合併策略。有關詳細資訊,請參閱 git-merge[1]

--rerere-autoupdate
--no-rerere-autoupdate

在 rerere 機制重複使用目前衝突的已記錄解決方案來更新工作樹中的檔案後,允許它也使用解決方案的結果更新索引。--no-rerere-autoupdate 是一個很好的方法來仔細檢查 rerere 的執行動作,並在將結果使用單獨的 git add 提交到索引之前,捕獲潛在的合併錯誤。

--reference

不要以「This reverts <full-object-name-of-the-commit-being-reverted>.」開始記錄訊息的主體,而是使用「--pretty=reference」格式(參見 git-log[1])參考提交。可以使用 revert.reference 配置變數來預設啟用此選項。

序列器子命令

--continue

使用 .git/sequencer 中的資訊繼續進行中的作業。可用於在解決失敗的 cherry-pick 或 revert 中的衝突後繼續。

--skip

跳過目前的提交,並繼續執行序列的其餘部分。

--quit

忘記進行中的目前作業。可用於在失敗的 cherry-pick 或 revert 之後清除序列器的狀態。

--abort

取消作業並返回到序列前的狀態。

範例

git revert HEAD~3

還原 HEAD 中倒數第四次提交所指定的變更,並使用還原的變更建立新的提交。

git revert -n master~5..master~2

還原由 master 中倒數第五次提交(包含)到 master 中倒數第三次提交(包含)的提交所完成的變更,但不使用還原的變更建立任何提交。還原只會修改工作樹和索引。

討論

雖然 Git 會自動建立基本的提交訊息,但強烈建議解釋為什麼要還原原始提交。此外,重複還原還原將導致越來越難以處理的主旨行,例如 Reapply "Reapply "<原始主旨>""。請考慮將這些重新措辭為較短且更獨特。

配置

此區段中此行下方的所有內容都是從 git-config[1] 文件中選擇性包含的。內容與其中找到的內容相同

revert.reference

將此變數設定為 true 會使 git revert 的行為如同給定 --reference 選項一樣。

另請參閱

GIT

git[1] 套件的一部分

scroll-to-top