2012-01-13 45 views
1

當我輸入:混帳給了我太多的底墊選項

git rebase -i HEAD~3 

而不是越來越近3個提交,我看到的最後10

出於某種原因,其中N是多少我通過,如果2 < = N < = 10,我看到10個選項。如果N = 1,我只看到最後一次提交。

這引出2個問題: 1.有人知道爲什麼會發生這種情況嗎? 2.有誰知道我能如何讓N成爲3?在進一步的承諾中會出現很多衝突,我不想與他們作對。

對於一些上下文: 我有一個git「功能分支」,這只是一個補丁,允許一些遺留代碼在本地Mac上工作。它解決了一些仍在製作中的古老Drupal安裝中的一些問題。我一直在補丁,在本地開發,然後重新提交它的提交,以便它可以在分段環境中測試。它的工作很好......直到現在。

+1

那裏有一個合併提交? – Cascabel 2012-01-13 19:36:56

+0

'git show-branch'的輸出是什麼? – 2012-01-13 19:37:08

回答

3

您所看到的關鍵是rebase的實際行爲以及修訂說明符~。 我得到了這個樹結構和關於~如何從http://schacon.github.com/git/git-rev-parse.html#_specifying_revisions工作的信息。

以下歷史圖由Jon Loeliger提供。雙方承諾節點B和C是提交節點A.家長提交的父母下令左到右:

G H I J 
\/ \/
    D E F 
    \ |/\ 
    \ |/ | 
    \|/ | 
     B  C 
     \ /
     \/
     A 

正如我採購的頁面顯示,~指的是第N個祖父母那裏的祖父母將是第一任何合併的父母。如果您位於HEAD - >A和指定HEAD~3作爲您的修訂版的分支中,那麼該分支將指向G

所以rebase -i HEAD~3會說你想互動地將所有提交從G改爲A ontop of G。這意味着您將看到所有其他提交作爲rebase進程的一部分,因此您不會將DBA作爲rebase列表中的A-FH-J。這將是8個不同的提交列出與3。

+0

你是什麼意思檢查?據我瞭解,rebase -i HEAD〜3列出了所有可從HEAD獲得的提交,但不能從HEAD獲得〜3 – 2012-01-13 21:16:46

+0

檢查什麼?如果你的意思是'checkins',我應該說'提交'。 (我會改變這一點)。 HEAD〜3只是對HEAD的第3位祖父母的引用,如果存在任何合併,HEAD將選擇每個合併的第一個父代。 rebase操作將執行所有提交,包括合併分支上的提交,從HEAD〜3到HEAD。 – James 2012-01-13 21:24:38

+0

是的,我的意思是checkins。好答案。非常感謝 – 2012-01-13 21:29:55