2010-02-04 35 views
6

注意:我不確定是否已經提出這個問題,因爲我找不到符合我的上下文(或I)的任何問題我無法理解現有問題的背景「)Git:無法理解主分支上發生分支(主題)提交/合併的原因

我很喜歡Git這些天。特別是,話題分支。我正在研究一個小型代碼共享應用程序。我有(主),「認證」,「書籤」,「評論」,「鼻子」等(本地)分支...

我的(打算)工作流程如下所示:創建主題分支==>處理主題分支==>將文件提交到分支==>將主題分支更改合併到「主」分支。 (後來刪除主題分支)

我試着做同樣的幾個分支。它運行良好。但後來當我檢查git圖時,即使我遵循相同的工作流程,所有機會都發生在「主」上。沒有樹線分歧和聚合!它從那時起顯示了一條帶有多個提交的單線。我不知道爲什麼?我的印象是,我用頭指針擰了一些東西?

舉一個實際的看法,這是我的git圖:http://github.com/none-da/zeshare/network

下面是我使用的命令:

>> git branch authentication_feature 
>> git checkout authentication_feature 
>> # I work with all the files here in "authentication_feature" branch 
>> git commit -m "Authentication_feature is up" # commiting to the branch 
>> git branch # just to confirm, which branch I am working on 
>> git checkout master # trying to shift to master branch 
>> git merge --no-commit authentication_feature # I merge in two steps. This is step 1 
>> git status;git add; git commit -m "Authentication_feature" merged to "master". # This is the step 2 
>> git log --graph --pretty=oneline # confirming the graph 
>> git push origin master # pushing to the remote server(github) 
+0

您的鏈接不適合我。你是如何創建分支的?我想我們需要更多的信息,比如你使用的命令。 – 2010-02-04 02:44:39

+0

恐怕沒有足夠的答案細節(鏈接超時),請確保遵循任何教程/手冊並查看是否得到相同的結果。選中您進行更改的分支等等。 – stefanB 2010-02-04 02:52:34

回答

5

但後來當我檢查git的圖形,即使我遵循同樣的流程,所有的機會都發生在「主」。沒有樹線分歧和聚合!

嗯......我看你的一些分支和合並的。

你會發現在這個page all the possible merge scenarios
(當時編譯 - 2007年末 - 現在SO貢獻者:Jakub Narębski

您可以在快進的情況下,這可以解釋爲什麼你的合併將使所有的提交似乎都會在完成後提交:

2 /快進案例;有沒有提交A,B,C,和我們 從以下情況開始:

1---2---3    <-- trunk <-- HEAD 
      \ 
      \-a---b---c <-- branch 

2.1/「git merge branch

1---2---3   /----- trunk <-- HEAD 
      \   v 
      \-a---b---c <-- branch 

一晃結果簡單地移動樹幹的頭部。在2.1

2.2 /「git merge --no-commit branch

喜歡,因爲快進不創建一個承諾:
它不創建一個提交,因此。

所以,如果你沒有在主犯,因爲你分支出來,然後做主人的合併,你要做的就是重置主HEAD ...


另一個原因爲分支不顯示是在presentation page of the GitHub Network Graph visualizer描述的「待辦事項列表效應」(這是「混帳圖」你是指這裏)

但你看到的每一次提交一次。讓它沉入第二。
我發現,很多程序員都習慣了,他們錯過了事實,我們的圖形可視化工具實際上是顯示和連接不同信息庫的集中供應鏈管理。

如果我以自己爲根圖繪製圖,那麼該圖顯示了一些待辦事項的代碼列表,但我還沒有將其拖入我的代碼庫。
當我想趕上什麼社會在他們我的回購叉一直在做,我可以打了圖表,就能看到立即別人已經達到。
如果我在Bertg的變化來拉,下一次我看到圖表,Bertg將不再顯示在所有的,因爲他將不再有我沒有任何承諾。
繼續思考待辦事項清單,您將瞭解該圖表。

因此,如果對於來自其他回購分行的合併(即,您合併後不再看到這些分支機構),這可能是因爲合併您自己的回購分支機構:合併後,您不會再在圖表中看到它們。

但我這樣做,因爲:

  • 我不是該項目的所有者。
  • 我可能想從您的任何分支中提取我的回購變更。
+0

哦!這讓我想!但如果你看到我的項目圖,我開始在開始時看到不同的分支,並且合併了一個和兩個分支,但後來即使我對另一個分支也做了同樣的事情,但我沒有看到該分支有類似的分支(之前已經發生過)。看起來好像整個提交是在master上完成的,我認爲這就是整個問題,「git merge --no-commit」(我之前提到過)實際上是對這個問題負責的,不是嗎? – 2010-02-04 08:42:17

+0

@Maddy: 「'git merge --no-commit'」在這裏並不是原因,如果你處於快進合併場景。請參閱我的編輯答案。 – VonC 2010-02-04 09:06:53

+0

'git merge --no-commit':With'--no-提交'執行合併,但假裝合併失敗並且不自動提交,給用戶一個檢查和進一步調整的機會他在提交之前合併結果。 - 所以這意味着代碼被合併,但它不是在git記錄器,所以你不會看到圖中的任何合併,是正確的? – stefanB 2010-02-04 22:52:36

0

你沒有說你實際使用什麼命令,但我的猜測是,你用git branch創建了你的分支,但沒有檢查出它移動到分支。您可以按照以下步驟執行此操作:

git checkout master -b topic22 

這使您不太可能會無意中承諾主人。

既然你已經添加了你所做的命令序列,我看到你沒有簽出分支。

命令序列看起來很好。我認爲它看起來沒有分支的原因是因爲在主分支上沒有干預提交。合併後,它看起來像一個順序開發流程。這在其他答案中有很好的討論,所以不需要在這裏詳細說明。

+0

@Jamey,我用我使用的命令更新了我的問題。請諮詢問題所在。 – 2010-02-04 05:08:35

+0

我總是發現topic22是一個有趣的功能。 – theIV 2010-02-04 05:09:40

0

你使用類似

git show-branch 

向您展示的分支機構和簽到,一旦你合併你的分支掌握你看不到了修改 - 不知道爲什麼。

我找不到任何行爲的解釋,但似乎沒有任何git存儲庫的問題,因爲git log顯示每個分支的所有提交。

所以我想這只是工具顯示分支圖的方式。

+0

@stefanB,我用我使用的命令更新了我的問題。請諮詢問題所在。 – 2010-02-04 05:07:42

+0

@stefanB,但github網絡圖應反映我如何提交和合並否?我確定我使用命令的方式有些問題! – 2010-02-04 05:24:58

0

我是git和github自己的新品牌(鏈接仍然存在),但是在看完你的步驟之後,是不是因爲你沒有將實際分支推送到github?這似乎是爲我工作至今(我插入推送命令):

... 
>> git commit -m "Authentication_feature is up" # commiting to the branch 
>> git branch # just to confirm, which branch I am working on 
>> git push origin authentication_feature # push the branch to github 
>> git checkout master # trying to shift to master branch 
... 
+0

@Chris,你將分支推送到遠程地址,這很好,但沒有合併到主站!如果你檢查網絡圖形鏈接(如果github現在已經啓動),我提到的方法確實創建了不同的線條(圖線),只是以前。它現在只做:'(我也是新來的git的方式 – 2010-02-04 06:01:46

+0

重新:合併到主人 - 我刪除了其他步驟(「...」) – 2010-02-04 14:50:47

7

我敢打賭,你正在尋找--no-ff開關git merge。默認情況下,merge只會將HEAD更新爲新分支的提示,如果沒有干預提交。

如果您想離開合併提交以幫助分組您的提交,請通過--no-ff

+0

我開始使用這個,我永遠不會離開它。 – 2010-03-18 13:39:27

0

作爲替代使用git merge --no-ff

如果要提交專題分會發展的作用主要分支,但不是所有的人的承諾,那麼你可以使用git merge --squash。當您這樣做時,提交未標記爲合併,並且沒有主題分支的第二個父代。單個提交列表包含在壓扁合併的提交註釋中,因爲它們將以git log列出。

我們一直在使用這個與SVN鏈接的項目(由git svn),所以我們的主分支有一個線性歷史記錄。這樣,我們不必在運行git svn dcommit之前將git落實圖變平。

相關問題