簡體   English   中英

git:將分支變基到其變基的父級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM