我已經克隆了一個公共存儲庫。在我的本地庫我有一個分支結構類似這樣的地方字母代表提交:Git fork - 重新綁定多個分支 - 保護程序共享提交
[public tag: v1] - A - B - C [myBranch1]
\
\- D [myBranch2]
公共回購已移動,並且發佈了一個新的標籤「V2」。我想變基我的樹枝到新的版本,所以我所做的:
git rebase --onto v2 v1 myBranch1
git rebase --onto v2 v1 myBranch2
這似乎是工作,但它會創建提交A和B的內容相同,但不同的散列碼不同的副本:
[public tag: v2] - A' - B' - C' [myBranch1]
\
\A''- B''- D' [myBranch2]
我知道我可以做更復雜的東西,如:
git rebase --onto v2 v1 myBranch1
git rebase --onto myBranch1 B myBranch2
這應該給我,我想,但相當多的複雜的,結果特別是如果/當我創造更多additi ONAL分支機構。當我去捕獲提交hashcode時,它更容易出錯,並且必須跟蹤每個分支從哪個分支出發。
1)有沒有更好的方法來實現這個結果?我想你可能建議替代工作流程,但我很確定這是我想維護的分支/提交結構。
2)爲什麼做A'和A''的散列碼有區別?它們不是將相同差異/作者/時間戳應用於相同基線/內容的產品嗎?我意識到兩者是作爲兩個獨立的行動而產生的,但我會預料到這些行動是確定性的,因此「碰撞」(正確地)。
如果我決定嘗試自動執行此操作或理解某人使用自動化操作,則merge-base將非常有用。我明白 –
追加:你的初始點2,但我認爲torek打在正確的答案爲什麼A'和A'出來不同的哈希。 –
A和A有不同的散列,因爲它們的提交時間戳不同我認爲這就是我認爲唯一不同的提交 –