我正在使用 Github,帶有分支development,live以及各種功能和錯誤分支。
當我將功能或錯誤修復合并到開發中時,我通常會進行壁球合并(通常通過 GH 網站,盡管它相當于git merge --squash branchname)。
然后,當我從開發更新實時時,我將合并開發壓縮到實時。
這樣做的好處是提交訊息會自動填充提交串列(因為這些也被壓縮,所以是 PR 串列)。
我遇到的問題是,即使在將開發合并到實時之后,實時分支仍然被列為落后開發 - 所以下次我合并兩者時,它包括我知道已經合并的提交。
我認為我正在做的相當于:
git checkout feature/1& 做出改變git checkout developmentgit merge --squash feature/1git commitgit checkout livegit merge --squash development(添加一個實時提交)git commitgit checkout feature/2& 做出改變git checkout developmentgit merge --squash feature/2git commitgit checkout livegit merge --squash development(將兩個提交添加到 live -feature/1和feature/2)
為什么在第 6 步之后沒有“完成”合并并在其下方畫一條線?
uj5u.com熱心網友回復:
“壁球合并”并不是真正的合并。它本質上是說“從這些更改中創建一個補丁,并將該補丁應用到目標分支”。重要的是,它不記錄與原始提交的任何關系。
因此,就 git 而言,您的存盤庫包含三個完全不相關的提交:
- 原始提交
feature/1(如果您洗掉該分支,可能會收集垃圾) development使用您的第一個“壁球合并”創建的提交live下一次“壁球合并”創建的提交
作為一般規則,您不應該在“壓縮合并”其中的更改后繼續使用分支 - 它上的歷史現在代表了一個永遠不會匹配目標分支的“替代現實”。這對于原始功能分支可能很好 - 一旦合并,您就可以將其洗掉。因為development,您必須洗掉它,然后從live;重新創建它。或者,等效地,硬重置它以指向與live.
直接的解決方案就是不使用從developmentto的壁球合并live。要么使用真正的合并(創建合并提交,記錄合并提交之間的關系),要么使用快進合并(重新指向live中的現有提交development,根本不創建任何新提交)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441094.html
上一篇:是否可以自動更新github令牌
