[英]How to revert a merge commit with a newer commit after it?
我傾向於使用 Tower 作為我的 git 客戶端,在這里你可以看到我直接還原了一個較舊的提交。
首先在本地恢復你想要擺脫的東西:
git revert sha-of-2 -m X
其中 X 是父編號(在這種情況下可能為 1)。 請參閱此處了解詳細信息。
解決由此產生的任何合並問題。 解決這些潛在沖突將確保正確應用1
而不必先恢復它。 然后提交並推送。
結果將是:
-- 4 -- 2 -- 1 -- '2 <- master
/
-- 3 --/
其中'2
是2
的倒數。
警告:重寫歷史記錄后強制推送到 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
其中'1
是1
的精選版本。
在命令行中,它應該像git revert 2
一樣簡單,盡管我知道有時恢復合並可能很困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.