2015-04-29 288 views
1

我們對兩個分支中的一個文件進行了更改。下面是該文件的提交歷史上分支答: enter image description here爲什麼Git在合併時忽略提交?

而這裏要說的是同一個文件的分支B上的提交歷史: enter image description here

現在,當我們合併分支一到分支B,我們結束了與分支A完全相同的提交歷史記錄。提交56dfe991已丟失: enter image description here

很明顯,這是非常令人不安的。特別是因爲我們不知道是什麼造成了這一點。有人有想法嗎?

+0

似乎在A.已經存在提交cb9fca35 – choroba

+0

'的Git分支-a --contains cb9fca35'會顯示已包含此提交的所有分支。 – bcmcfc

+0

您正在運行哪些命令來執行合併,或者您使用什麼GUI來管理存儲庫? – chepner

回答

1

原來,經過仔細調查,該文件(稱爲CombinedSearchController.js)已經發生合併衝突,另一名開發人員已經解決了與「使用我/他們」選項的衝突。這樣一來,衝突的提交就一起被排除在提交歷史之外。

我發現了這一點,通過搜索曾在衝突列表,文件名的提交信息,使用命令git log --all --grep='CombinedSearchController.js'

0

我從未發現過這個問題。合併總是會將所有提交哈希添加到歷史記錄中,除非您在重新綁定之後覆蓋它們(這會更改哈希ID,即使文件更改仍然存在)。合併後

轉到您的分支B和運行:

git branch --contains commitHashYouAreLookingFor 

應該告訴你,包含了所有提交的分支,其中之一應該是B.如果你那麼想找到什麼是合併包括在B做的承諾:

git log --merges commitHashYouAreLookingFor 

希望這可以幫助。

1

在Git中沒有「file commit history」這樣的事情。有歷史和文件。

歷史記錄被視爲Git存儲庫粒度,即每個提交都有一組父項。這是您在運行git log時看到的圖像,或者是更直觀的輸出git log --graph --oneline --decorate

現在,您可以要求Git以每個文件爲基礎過濾此歷史記錄,例如, git log -- file。這隱藏了不會觸及文件的提交,,但也會執行一些歷史簡化來隱藏不參與文件歷史記錄的提交。詳細記錄在"History Simplification" section of git log's documentation中。

實質上,當到達合併提交時,如果合併提交的父級之一沒有引入對文件的更改,則忽略此父級。

因此,例如,項目根目錄中的git loggit log .可能會顯示不同的歷史記錄。