![](/img/trans.png)
[英]git pull --rebase — is the remote rebased onto the local branch?
[英]git: rebase branch onto its rebased parent
最初的情況非常簡單。 有一個正在積極開發的feature_1
分支,以及從 HEAD 分支的一個feature_2
分支。
A-B: feature_1
\ C: feature_2
假設提交 A 添加了一個新文件,提交 B 在該文件中附加了一行,而 C 附加了另一行。 因此,更改都在一個文件中並且彼此接近。
在處理 feature_2 時,新版本的 feature_1 被強制推送: A-B': feature
(例如修復錯字)。
我想在我正在並行處理的分支 feature_2 中進行此修復,所以我重新設置: git checkout feature_2 && git rebase -i feature_1
。 目標是:
A-B': feature_1
\ C': feature_2
交互式(只是為了看看幕后發生了什么)變基菜單給了我兩個可以使用的提交:B(舊的)和 C。
第一種選擇:我兩個都選。 在這種情況下,將有一個沖突揀貨 B 和另一個沖突揀貨 C。 但基本上這是我必須解決兩次的相同沖突。
第二個選項:在這個簡單的例子中,B完全被B'取代的背景知識已經在feature_1中,我可以從rebase菜單中刪除B,並且只需要在rebase C時解決沖突。
第二個選項適用於如此小的修復和非常少量的提交,但想象一下 feature_1 中有一個跨越數十個提交的大重構。 意外放棄重要更改的風險將非常高。
是否有另一種方法來限制我必須在這里解決的沖突數量?
由於您知道B
已被B'
替換,因此正確的解決方案是將B
從 rebase 指令表中刪除。 然后,您只需解決C
放在B'
(如果有)頂部時出現的沖突。
請注意,當您以這種方式進行時,沒有“意外丟棄重要更改的風險”:如果某物被丟棄,那僅僅是因為B
被其他人變形為B'
(並且必須有這樣做的理由)。
如果您的上游( feature_1
)跨越多個提交,那么假設您剛剛使用git fetch
獲取了新的上游。 然后你可以做“正確的事”
git checkout feature_2
git rebase --onto origin/feature_1 origin/feature_1@{1}
也就是說,您說您想將您的功能分支移植到origin/feature_1
(新分支)之上,但您知道它是從該分支的先前版本( @{1}
)分支出來的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.