2011-10-12 328 views
9

我有一個主人和「PersonalSite」分支的代碼庫我正在努力。我一再試圖將主人合併到PersonalSite分支中無濟於事。git合併不合並

這一次,我原本以爲一切都理順了,所以我所做的:

git checkout master 
git pull 
git checkout PersonalSite 
git pull 
git merge master 

它看起來就像一切工作,並列出我本來期望的文件集,但有一個衝突。衝突是正確的,如預期的那樣,所以我修正了它,做了「git add」,「git commit」,然後是「git push」。但是現在,當我查看我的git日誌時,它只顯示了一個沒有代碼更改但只有一次衝突的提交。

現在,當我從「PersonalSite」分支運行「git merge master」時,它會顯示「已經是最新的」。但事實並非如此,因爲我嘗試合併的變化實際上並未進行合併。我到底要做什麼才能讓主人真正融合?

回答

5

通過修復衝突並提交合並衝突,您已完成合並。必要時Git會添加合併提交,這很正常,但除了合併發生以外,並且在發生衝突時合併了哪些文件,它們不記錄任何內容。如果你仔細看看你的日誌,你會發現實際上有來自主人的提交。編輯: 好吧,試試這個測試吧。您不必使用合併命令,只需將主人拉入PersonalSite即可。

git checkout PersonalSite 
git pull origin master 

看看給了你什麼。如果它說最新,那麼你已經正確合併。

如果您像本地合併了本地東西,那麼您需要確保本地跟蹤分支是最新的。始終指定分支名來自拉,

git pull origin master 
git pull origin PersonalSite 
+1

我說這沒有合併的原因是,有在主分支修改未反映在PersonalSite分支合併,甚至後... – LAW

+0

更新的答案。 – sciritai

+1

git pull起源[分支名稱]做了詭計 – Bijan

0

合併不會顯示除您的衝突解決方案之外的任何更改。

要查看合併兩邊的差異做:

git diff head^.. 

git diff head^2.. 

換另一側。

希望這會有所幫助。

3

假設你實際上已經合併了你的意思合併(這是可能的,但很難說,因爲你的解釋),你還是不會看到的diff輸出git log,只是提交消息。即使您使用-p來指示git log顯示差異,合併提交的差異通常也將爲空,或者可能顯示衝突解決方案。這是因爲在語義上,只有衝突解決方案是合併提交的一部分;其他更改是其他提交的一部分。

如果你想git log反正向您展示合併的全效提交,你可以使用:

git log -p -m -c 

的選項功能:

  • -p引導其顯示的diff,不只是提交消息;
  • -m告訴它顯示合併提交的差異;和
  • -c告訴它兩個diff文件合併成一個合併提交

gitk的差異視圖會做同樣的事情。