2012-12-12 48 views
-1

我有分支說「實驗」,並在幾天後推送。現在,主人已經更新了,我需要在重新將實驗重新發送給主人後再次進行實驗。但是,當我重新掌握它以掌握時,我並沒有看到主人之上的實驗補丁。我的實驗分支指向主人。Git rebasing未應用基礎分支頂部的更改

出了什麼問題?難道是因爲這個實驗分支已經與主人或其他東西合併了嗎?

Git的狀態

$ git的狀態
分支實驗
未跟蹤文件:
(使用 「混帳添加...」 在什麼將致力於包括)
A.TXT
沒有添加提交但未跟蹤文件存在(使用「git add」跟蹤)

Git log

$ git的日誌實驗
提交bc6c71d5ec6d8798aa283c9feaec844cd03edc60
作者:ssrivastava
日期:星期二11月27日12點十五分37秒2012 0530
[實驗]增加索引球員狀態

關於重新掌握

首先,將rewindding head to re發揮你的工作...
快速轉發的實驗掌握。

通常在應用rebase時,它會將最新的更改應用到基本分支上的當前分支,但我在這裏沒有看到任何東西。

+0

@ user1527927:您將不得不提供有關回購的更多詳細信息; 「git branch -va」,「git status」(當ob分支和master上的時候)的輸出是有用的,並且請告訴我們你用來執行rebase的命令。 –

+0

@ user1527927:也請告訴使用* exct命令*您用於重新綁定,而不僅僅是輸出。 –

+0

git rebase master – sumitshining

回答

1

一般來說,當重新綁定時,Git足夠聰明,可以檢測到哪些提交不做任何操作並將它們拒之門外。所以當你在實驗分支中做了與提交相同的事情時,你的主要更改會被忽略,因爲它不會改變任何內容。雖然這種行爲在審查rebase時可能會造成混淆,但這不是發生在您的案件中的事情。

通過找到兩個分支的共同祖先,然後用作舊基地。在你的情況中,因爲你已經將實驗分支的更改合併到 master分支中,所以共同的ancenstor就是合併提交。現在,犯的是同樣在此刻什麼碩士點,它實際上是實驗分支的孩子(在合併之前,其指向的實驗分支父):

B --- * --- O --- M  B ~ old base, O ~ old master 
\    /  M ~ current master (the merge commit) 
    * --- * ----- E   E ~ experiment branch 

所以主已經包含完整的實驗分支,而M實際上比實驗分支提前一個提交。如果Git現在在主控之上重播實驗分支中的提交,那麼它將僅僅跳過那些提交,因爲它們是空的 - 所有更改都在master內。所以基本上它會以快進的方式結束。現在,因爲Git很聰明,所以不需要嘗試將所有這些提交應用到主控制器上,以查看它們全部會被跳過。由於主人在實驗分支之前,情況總是如此。所以它可以直接將實驗分支快速轉發到掌握。

+0

好的。得到它了。謝謝。 – sumitshining