我們對兩個分支中的一個文件進行了更改。下面是該文件的提交歷史上分支答: 爲什麼Git在合併時忽略提交?
而這裏要說的是同一個文件的分支B上的提交歷史:
現在,當我們合併分支一到分支B,我們結束了與分支A完全相同的提交歷史記錄。提交56dfe991
已丟失:
很明顯,這是非常令人不安的。特別是因爲我們不知道是什麼造成了這一點。有人有想法嗎?
我們對兩個分支中的一個文件進行了更改。下面是該文件的提交歷史上分支答: 爲什麼Git在合併時忽略提交?
而這裏要說的是同一個文件的分支B上的提交歷史:
現在,當我們合併分支一到分支B,我們結束了與分支A完全相同的提交歷史記錄。提交56dfe991
已丟失:
很明顯,這是非常令人不安的。特別是因爲我們不知道是什麼造成了這一點。有人有想法嗎?
原來,經過仔細調查,該文件(稱爲CombinedSearchController.js
)已經發生合併衝突,另一名開發人員已經解決了與「使用我/他們」選項的衝突。這樣一來,衝突的提交就一起被排除在提交歷史之外。
我發現了這一點,通過搜索曾在衝突列表,文件名的提交信息,使用命令git log --all --grep='CombinedSearchController.js'
我從未發現過這個問題。合併總是會將所有提交哈希添加到歷史記錄中,除非您在重新綁定之後覆蓋它們(這會更改哈希ID,即使文件更改仍然存在)。合併後
轉到您的分支B和運行:
git branch --contains commitHashYouAreLookingFor
應該告訴你,包含了所有提交的分支,其中之一應該是B.如果你那麼想找到什麼是合併包括在B做的承諾:
git log --merges commitHashYouAreLookingFor
希望這可以幫助。
在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 log
和git log .
可能會顯示不同的歷史記錄。
似乎在A.已經存在提交cb9fca35 – choroba
'的Git分支-a --contains cb9fca35'會顯示已包含此提交的所有分支。 – bcmcfc
您正在運行哪些命令來執行合併,或者您使用什麼GUI來管理存儲庫? – chepner