[英]Merge git --squash branch into master does not appear in gitlab website?
[英]Git - How to recurringly squash merge to a master branch
我有兩個分支:
合並后,我想繼續使用我相同的個人分支,然后可以隨意重新合並回 dev 分支。
使用 svn,這很容易做到,而不會發生任何合並沖突。
現在,dev 分支知道它從個人分支中獲得了什么,而我的個人分支知道它擁有來自 master 分支的所有內容。
使用 git,我嘗試使用git merge --squash
到 go 從個人分支到開發分支,第一次效果很好。 但是第二次我遇到了一堆沖突。 由於merge --squash
不會合並原始提交,而是進行與原始提交無關的新提交,因此 git 沒有意識到我已經將一堆內容從我的個人分支合並到 dev 分支.
git 中的這個工作流程有什么解決方案嗎? 似乎如果我merge --squash
一個分支,我必須為下一次創建一個新分支。
您是否希望壓縮的修訂支持開發人員? 就像,一個又一個壁球修訂? 如果是這種情況,您可以這樣做:
git checkout --detach my-branch
git reset --soft the-previous-squash-commit
git commit -m "A new squash operation that covers revisions x, y and z"
git checkout dev
git merge -m "Merging a new squash commit" HEAD@{1} # given that I didn't have a branch set up for the squashed revision
我認為那里不應該有任何沖突。
首先要了解的是,您描述所需行為的方式(僅合並到目標記錄 1 次提交)正是默認合並的工作方式。
看起來不是這樣的原因是,默認情況下,許多 git 命令遵循所有進入合並的分支。 您可以通過為命令提供--first-parent
選項來更改它
git log --first-parent
常規合並和“squash 合並”都准確記錄一個新提交並將其放置在目標分支上(即,當您發出命令時,分支已簽出)。
不同之處在於 squash 合並假裝他們沒有編寫合並 - 也就是說,新提交的唯一父級是目標分支的先前提示。 正常的合並有第二個父級 - 無論您合並到哪個分支 - 正如您所注意到的,如果您希望后續合並正常工作,這是必需的。
您可以跳過箍來重新發明輪子。 例如,eftshift0 為您提供了一種方法,可以隨時使dev
與您的其他分支的尖端相匹配 - 這有點像合並而不管合並基礎如何,只要您的分支對dev
有貢獻。 如果您搜索 SO,您甚至可以找到更通用的解決方案。
但所有這些解決方案的共同點是,它們與 git 的工作原理背道而馳。 按預期使用 git 確實要容易得多 - 即,當您想要進行這些更改時,只需將您的分支合並到 dev 中,如果您想要不遵循側分支的 output 使用first-parent
。
在git merge --squash
之后,不應使用分支進行進一步合並。
如果你堅持使用 squash 合並,你可以使用這個流程:
git checkout dev
git merge --squash personal
git tag personal_1_0 personal #optional to save old personal branch
git checkout -B personal
實際上,您從當前的開發人員創建了一個新的個人分支,稍后您可以從中壓縮合並。 每次壓縮合並時都執行此操作(每次使用不同的標簽)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.