簡體   English   中英

如何將合並提交還原為之后的新提交?

[英]How to revert a merge commit with a newer commit after it?

我已經知道如何恢復合並提交,包括選擇父母。
但是現在我面臨一種不同的情況,即在合並提交之后有一個新的提交。

看着:

在此處輸入圖像描述

可以看到在合並提交“2”之后,有一個新的提交“1”。
我想要的只是將“3”的合並恢復到分支主控。 (我知道“2”是一個合並提交)。

問題:

如何使用紅色箭頭還原合並提交? 我已經對相對提交進行了編號,因此更容易在答案中引用。

我傾向於使用 Tower 作為我的 git 客戶端,在這里你可以看到我直接還原了一個較舊的提交

不重寫歷史:

首先在本地恢復你想要擺脫的東西:

 git revert sha-of-2 -m X

其中 X 是父編號(在這種情況下可能為 1)。 請參閱此處了解詳細信息

解決由此產生的任何合並問題。 解決這些潛在沖突將確保正確應用1而不必先恢復它。 然后提交並推送。

結果將是:

-- 4 -- 2 -- 1 -- '2 <- master
        /
-- 3 --/

其中'22的倒數。

重寫歷史:

警告:重寫歷史記錄后強制推送到 master 可能會對同一分支的其他用戶產生嚴重的負面影響。

做一個交互式變基:

 git rebase -i sha-of-2

刪除合並提交,保留提交 1,然后強制推送 master。

結果將是:

-- 4 -- '1 <- master

-- 3

其中'1是新提交,原始更改為1加上您已解決的任何沖突。

使用新分支重寫歷史

警告:重寫歷史記錄后強制推送到 master 可能會對同一分支的其他用戶產生嚴重的負面影響。

這可能更容易理解。 它與 rebase 示例完全一樣,但不是應用 rebase-fairy-dust,而是您自己做艱苦的工作。

您可以自己重新進行這些更改,而不是重新設置基准。 重置為4 ,創建一個新分支,cherry pick 1 ,將 master 重置為'1並強制推送。

     /- '1 <- master
    /
-- 4 -- 2 -- 1
        /
-- 3 --/

git reset --hard sha-of-4
git checkout -B newmaster
git cherry-pick sha-of-1
# fix conflicts if any
git checkout master
git reset master --hard newmaster
git push --force

其中'11的精選版本。

在命令行中,它應該像git revert 2一樣簡單,盡管我知道有時恢復合並可能很困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM