2015-06-18 82 views
0

我有以下的情況下,我有一個文件example.txt中Git的內容只出現在日誌

line A 

我有承諾1中加入這一行

比提交2我改線

line A B 

我做了提交2,我推了它。

下載分支,查看文件時,你只能看到

line A 

如果你

git的日誌 - example.txt中

commit 1 

但如果我不

git的日誌

commit 2 
commit 1 

有誰知道什麼能發生?以及如何獲得更多診斷信息或甚至更好地解決此問題?

只是爲了完成一些信息,我在主分支上,這個提交它在主分支的日誌上。

+0

這看起來像你在不同的分支上完成了提交。 – ckruczek

+0

可以請你發佈'git log --oneline --decorate --all'的輸出。 – Alex

回答

1

這很可能是因爲您團隊中的其他人進行了合併。這裏是會複製你所看到的一個情景:

  1. 你承諾1,推動
  2. 人X不拉並修改其它文件
  3. 你犯2,推動
  4. 有人修改一些文件的人X修改,並推動
  5. 人X做了拉

在這一點上,人X得到衝突,所以自動MERG通常在拉動過程中發生的提交不會執行。然後,個人X注意到他的機器上沒有進行本地更改 - 具體而言,將提交2中的更改更改爲example.txt。他放棄了這些變化,承諾並推動。所以你的改變永遠不會被合併,而example.txt只包含「A行」。

那麼,爲什麼提交2沒有顯示當一個人做文件的日誌?原因歸結爲git決定應該包含在文件歷史記錄中的提交內容。 Git在樹中行走,並且(默認情況下)當它碰到一個提交,其中example.txt沒有與其父代中的一個進行更改時,它繼續與該父代進行搜索,而忽略另一個。所以當它碰到X所做的合併時,它忽略了example.txt不同的父文件,即它忽略了包含提交2的路徑。您可以通過將--full-history傳遞給git log來驗證該情況,該更改默認行爲以便遵循父母雙方。如果你這樣做,你應該看到承諾2

這個故事的寓意是,當你有合併衝突,你看到的局部變化,你沒有做,你必須提交這些變化與自己一起。否則,你會再次遇到這種情況。