簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-revert 最後更新於 2.50.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”部分。

選項

<commit>…​

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

-e
--edit

使用此選項,git revert 將允許你在提交還原之前編輯提交訊息。如果你從終端執行此命令,這是預設行為。

-m parent-number
--mainline parent-number

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

還原一個合併提交表示你永遠不希望合併帶來的樹更改。因此,後續的合併將只引入那些不是先前還原的合併的祖先提交所引入的樹更改。這可能符合也可能不符合你的預期。

有關更多詳細資訊,請參閱 如何還原錯誤的合併 操作指南

--no-edit

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

--cleanup=<mode>

此選項確定提交訊息在傳遞給提交機制之前將如何清理。有關更多詳細資訊,請參閱 git-commit[1]。特別是,如果 <mode> 的值為 scissors,則在發生衝突時,scissors 將附加到 MERGE_MSG 後再傳遞。

-n
--no-commit

通常,此命令會自動建立一些提交,其提交日誌訊息說明哪些提交已被還原。此標誌將還原指定提交所需的更改應用到你的工作區和索引,但不建立提交。此外,使用此選項時,你的索引不必與 HEAD 提交匹配。還原是針對索引的起始狀態進行的。

當你需要連續還原多個提交對索引的影響時,此功能很有用。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG 簽名提交。keyid 引數是可選的,預設為提交者身份;如果指定,它必須緊跟在選項後面,不能有空格。--no-gpg-sign 對於抵消 commit.gpgSign 配置變數和先前的 --gpg-sign 都很有用。

-s
--signoff

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

--strategy=<strategy>

使用給定的合併策略。此選項只能使用一次。有關詳細資訊,請參閱 git-merge[1] 中的 MERGE STRATEGIES 部分。

-X<option>
--strategy-option=<option>

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

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

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

--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 中倒數第五個提交(包括)到倒數第三個提交(包括)所做的更改,但不建立任何包含還原更改的提交。還原操作只修改工作區和索引。

討論

儘管 Git 會自動生成基本的提交訊息,但強烈建議解釋為什麼要還原原始提交。此外,重複還原還原操作會導致主題行越來越冗長,例如 Reapply "Reapply "<original-subject>""。請考慮重新措辭,使其更短、更獨特。

配置

本節中以下所有內容均從 git-config[1] 文件中選擇性地包含。內容與彼處相同:

revert.reference

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

另請參閱

Git

Git[1] 套件的一部分

scroll-to-top