我剛剛將一個功能分支重新分配到另一個功能分支(準備將所有東西重新分配給我的主人),它涉及到很多棘手的合併分辨率。我需要在rebase之後執行提交嗎?
rebase是否自動保存爲提交的地方?
這些修改在哪裏生活?我看不到任何東西,或git log --oneline
。
(因爲當我重訂後合併回我的分支同樣的問題。)
我剛剛將一個功能分支重新分配到另一個功能分支(準備將所有東西重新分配給我的主人),它涉及到很多棘手的合併分辨率。我需要在rebase之後執行提交嗎?
rebase是否自動保存爲提交的地方?
這些修改在哪裏生活?我看不到任何東西,或git log --oneline
。
(因爲當我重訂後合併回我的分支同樣的問題。)
Rebase正在將提交移到另一個分支之上。如果移動的提交導致合併衝突,則此提交會發生變化以反映合併解決方案。
rebase的目的是使你的提交看起來好像它們是你改變分支的改變。所以最合乎邏輯的方法是將合併衝突整合到這些提交中。因此不需要額外的提交。
合併是不同的,因爲它是將分支分支合併在一起的明確行爲。在每個分支中沒有提交被改變。衝突解決反映在合併提交中。
是的,成功的底墊和合並作出的提交。他們只是不會做出需要解決的衝突的提交,但隨後基本輸出(或合併)會告訴您發生了這種情況,以及如何解決它。
對於rebase,您只需要解決索引中的衝突,然後git rebase --continue
。
對於合併,您需要進行提交(git commit
),但會記住它是合併的事實,並且會提供合適的默認提交消息供您編輯。
在過去(2006年,前1.5.3和its user manual)git rebase
是presented like so:
的櫻桃採摘一個特殊情況是,如果你想整個分支 移到更新的「基礎」提交。
這由git-rebase
完成。
您指定轉移至移動(默認HEAD
),並在那裏將其移動到(無默認值), 和:
git cherry-picks
每個補丁出來的那支,- 其應用於目標的頂部,
- 並將
refs/heads/<branch>
指針移至新創建的提交。
因此,通過定義,提交都會進行(沒有提交需要做的)
底墊中的一個特殊情況是,當你想將你的工作,移動(並重新創建新)款。
從相同的教程(爲無需重訂後的任何進一步提交的說明):
假設你已經混了兩個特點的發展在當前HEAD,一個名爲「開發」分支。
x-x-x-x (master)
\
-f1a-f1b-f1c-f2a-f2b-f2c (dev, HEAD)
你想將其分成 「DEV1」 和 「裝置2」。假設
HEAD
是關老爺的一個分支,那麼你可以通過
git log master..HEAD
看起來或剛拿到的提交的原始清單,
git rev-list master..HEAD
無論哪種方式,假設您在
dev1
中計算出您想要的提交列表並創建該分支:
git checkout -b dev1 master
for i in `cat commit_list`; do
git-cherry-pick $i
done
-f1a'-f1b'-f1c' (dev1, HEAD)
/
x-x-x-x (master)
\
-f1a-f1b-f1c-f2a-f2b-f2c (dev)
您可以使用列表您編輯生成
dev2
分支的另一半,但如果你不知道你是否忘了什麼事,或者只是不喜歡這樣做體力勞動,那麼你可以使用git-rebase爲你做。
git checkout -b dev2 dev # Create dev2 branch
git-rebase --onto master dev1 # Subreact dev1 and rebase
這會發現,在
dev
所有補丁,而不是在dev1
,運用他們掌握的頂部,並調用結果dev2
。
-f1a'-f1b'-f1c' (dev1, HEAD)
/
x-x-x-x (master)
\
-f2a-f2b-f2c (dev2, HEAD)
哇!這是令人興奮的,兩種感官(驚人的強大,難以讓我的頭腦) – Benjol 2010-04-22 11:55:54
這是我所需要的答案 - 短,重點突出。我很欣賞他們爲增加價值而付出的更多努力,但他們確實應該至少在開始時包含上述文字。當我變得更加大膽時,我想我會開始編輯答案,以便排名靠前的答案也可以簡潔地回答「無論如何......無論如何,要感謝你回答我需要的答案。 – msouth 2015-08-13 18:48:43