你可能不知道的git revert操作細節


git revert主要用於還原一個或多個現有提交,並生成一條新的更改記錄。

日常開發過程中,可能會出現要發版的時候,發現master分支上合並了這一期不需要發版的功能點,需要將這些提交還原。

以下是 git 官網 給出的git revert 命令相關的選項。

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

選項

<commit>...

用於還原指定的某次提交記錄

git revert 版本號
git revert HEAD~3
git revert -n master~5..master~2

對於合並的提交記錄,如果直接使用 git revert 2a06e3ca2840277c6c3d1991f4f815cec0fea546,則會提示下面的錯誤信息:

error: 提交 2a06e3ca2840277c6c3d1991f4f815cec0fea546 是一個合並提交但未提供 -m 選項。 fatal: 還原失敗

git revert -m 2a06e3ca2840277c6c3d1991f4f815cec0fea546

error: 選項 `mainline' 期望一個大於零的數字

這就需要用到下面的這個命令選項

-m parent-number | --mainline parent-number

該選項主要用於還原 merge 操作產生的記錄。也是我們在工作場景中最容易用到的一個命令。

引自官網原文

Usually you cannot revert a merge because you do not know which side of the merge should be considered the mainline. This option specifies the parent number (starting from 1) of the mainline and allows revert to reverse the change relative to the specified parent.

Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.

合並產生的提交記錄會指向兩個父結點:如下圖所示
在這里插入圖片描述

在還原合並的提交的時候我們要指定以那個父節點為 mainline 本保留該主線的提交記錄。

所以就會出現我們經常會用到的指令:

git revert -m 1 32f842e7542bfb8b5d4dcf8fbe905028b1b99f33

這個命令的具體含義就是還原 feat_revert 分支合並過來的提交記錄。並保留 release-brance的提交記錄。

在這里插入圖片描述

我們可以看到在release-brance分支生成了一個新的提交,提交的內容就是還原了
feat_revert 分支合並過來的提交記錄。

如果執行#2父節點為 mainline

git revert -m 2 32f842e7542bfb8b5d4dcf8fbe905028b1b99f33

這個命令的具體含義就是還原 release-brance的提交記錄,並保留feat_revert 分支合並過來的提交記錄。

執行結果如下:

在這里插入圖片描述

-e | --edit

該選項是默認選項,允許我們修改提交的commit message

--no-edit

該選項不允許我們修改提交的commit message,會直接生成提交信息,並自動提交。

-n | --no-commit

不進行自動提交,默認會自動提交commit.

sequencer子命令

--continue

繼續當前的還原操作。在處理完沖突后可以使用這個命令繼續操作。

--skip

跳過當前提交並繼續序列的其余部分。

--quit

退出當前正在進行的操作。可用於在cherry-pickrevert失敗后清除sequencer state

--abort

取消操作,返回之前的狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM