[英]Rewrite a merge commit into a squash merge commit
我合並了一個長期存在的分支,由於沖突解決,我花了一些時間來完成合並。
我發現我無法使用git-svn
發布我的工作: git svn rebase
將重新設定合並分支的所有提交,而不是提交一個單一的合並提交。 我發現git merge --squash
有點晚了......
是否可以在不丟失所有已完成的沖突解決工作的情況下將合並提交(rebase 交互?)更改為“壓縮合並”提交(即,由於我沒有啟用rerere
工具,因此不會觸發新的合並)?
如果您已合並並使用git merge
( --no-ff
) 並希望將其轉換為git merge --squash
的等效git merge --squash
,則可以使用以下過程(假設合並提交是分支上的最新提交) ):
git reset --hard HEAD~1
(在合並之前將分支重置為提交。別擔心,它沒有丟失!)git cherry-pick -m 1 HEAD@{1}
(櫻桃挑選你剛剛刪除的合並提交作為正常提交,基於它和這個分支之間的差異)除了保留在合並期間完成的任何沖突解決之外,它還將保留原始合並提交信息(消息、作者、日期等),這對於修復來自 BitBucket 等生成一致提交消息的工具的錯誤合並非常有用。
我們有一個只提交壁球的策略,所以當有人不小心從 BitBucket PR 中選擇了正常的合並選項時,我最終會偶爾使用它。 或者單擊 Slack BitBucket 機器人上令人沮喪的“合並”按鈕,該按鈕不會為您提供合並策略的選擇...
也許git rebase --preserve-merges
適合你。
這是執行此操作時發生的情況的詳細答案:
請原諒我不喜歡從那里復制和粘貼。
我遇到了類似的問題,並且能夠通過簡單地重置和重新提交更改來創建壓縮提交。
起始布局:
* 06074985 (HEAD -> test1) Merge branch 'test2' into test1
|\
| * eb2aa088 (test2) test2 commit
* | c83180c8 test1 commit
|/
* b6628265 (master) base commit
git 命令: git branch temp (所以我不會丟失合並提交) git reset HEAD~1 git add 。 git commit -m "Squash commit" git diff temp (只是為了確保沒有任何改變)
結局布局:
* 5e229615 (HEAD -> test1) squash commit
| * 06074985 (temp) Merge branch 'test2' into test1
| |\
|/ /
| * eb2aa088 (test2) test2 commit
* | c83180c8 test1 commit
|/
* b6628265 (master) base commit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.