簡體   English   中英

成功合並后丟棄提交,同時保持合並提交的代碼完整

[英]discarding commits after a successful merge, while keeping the code of the merge commit intact

從 master 分支有兩個分支:develop 和 foo。 develop 和 foo 都與 master 發生了幾次提交不同。

foo 已合並到開發中。 現在 foo 和 develop 指向同一個合並提交,即提交的兩個“流”在這個合並提交中相遇(對於近似詞匯表示歉意)。

此合並提交中的代碼與應有的完全一致。 沒有什么是應該撤消的。

現在假設沒有人會想要檢查 foo 的任何先前提交。 所以,我們想“刪除”這些提交(即不撤消這些提交帶來的修改,只是沒有它們在歷史記錄中。事實上,查看歷史記錄,看起來好像 foo 從未存在過,並且合並提交不再是兩個“提交流”的交匯點)。

當然,如果 foo 在合並到 develop 之前被壓扁會更好,但這並沒有發生。

在合並后嘗試 rebase/squash foo 以解決一些沖突。 由於代碼與合並提交中的代碼完全相同,因此不需要解決沖突(免責聲明:可能是未以正確的方式嘗試此變基)。

有沒有辦法做到這一點?

重寫develop的頭部提交:

$ git checkout develop

# move back one commit, keep all differences in the index
#  (as if you had already 'git added' them) :
$ git reset --soft HEAD^

# commit this as a simple commit :
$ git commit

執行開發分支的交互式變基 這樣做可以讓你將提交壓縮到已經存在的提交中。 由於您正在重寫歷史記錄,因此您可以選擇要從歷史記錄中刪除的提交

如果您使用的版本低於 git 2.23:

git checkout develop
git rebase --interactive SHA_of_last_good_commit

如果您使用的是 git 2.23 或更新版本:

git switch develop
git rebase --interactive SHA_of_last_good_commit

使用 -i/--interactive 參數運行 rebase,使用最后一個“好”提交的 SHA1(即我們要修改的提交的父提交)。 這將打開交互式 window,您可以在其中看到從最后一次“良好”提交到當前分支頂部的所有提交,按時間順序列出(較舊的提交在文件頂部

暫無
暫無

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

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