我有不同的發布分支,比如說
- release_0(去年發布)
- release_1(今年發布)
- release_2(開發中)
- release_3(開發中)
release_2 分支是很久以前創建的,所以它只包含 release_0。release_3 分支是從 release_1 創建的。
我的印象是release_2應該有release_3的代碼,所以我將release_3合并到release_2。
后來有人告訴我,release_2 將在 release_3 之前上線,所以我從 release_2 恢復了合并提交(并推送了恢復提交)。
但是,由于 release_1 已經投入生產,所以我嘗試將 release_1 的更改合并到 release_2(release_2 基于 release_0)。不幸的是,git 說“已經是最新的。”。這是因為我將 release_3 合并到 release_2(雖然已恢復)并且 release_3 已經包含 release_1。
在這種情況下我能做什么?我閱讀了https://stackoverflow.com/a/15737656/1269572但這似乎不是一個解決方案,因為我需要從 release_2 中洗掉 release_3 代碼。
謝謝!
uj5u.com熱心網友回復:
本質上,您正試圖release_2進入一個相當于將部分合并還原到其中的狀態release_3。(因此,還原還原將不起作用。)不幸的是,除非您release_2在合并之前對 to 進行干凈的硬重置,否則這將是一團糟。如果滿足以下條件,我會考慮硬重置:
release_2自從release_3. _- 無論您需要繼續進行什么新的提交,
release_2都可以重寫而不會引起問題。 - 與您正在重置的團隊進行溝通會非常直接,并且您可以向任何基于它的分支正在進行中的開發人員
release_2提供適當的命令。git rebase --onto
如果您無法進行重置,那么最簡單的做法可能是進行新的提交,該提交代表尚未完成的所有更改release_1并將release_2其合并。(補丁也可以。)類似這:
# On release_2, identify the commit before the merge; let's call it CBM
# Make a temp branch pointing to release_1
git switch -c release_1-contents origin/release_1 --no-track
# Reset soft to point to the merge-base of this branch and CBM
git reset --soft $(git merge-base HEAD CBM)
git commit -m "Squash contents of Release_1 content"
# now merge it into release_2
git switch release_2
git merge release_1-contents # use the commit message to explain what and why
旁注:當嘗試在還原后再次提交時,重要的是他們的提交 ID;如果您更改它們,您可以再次將它們帶入。如果沒有太多的提交release_1并且你不介意在 repo 中永遠有重復的提交,你可以通過選擇一個范圍來重寫它們,或者使用rebase -fonrelease_1來簡單地重寫提交 ID,然后你可以再次合并它們。如果有很多提交,但我可能會傾向于進行單個壓縮提交,如上所述。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/458816.html
標籤:混帐
