[英]git-subtree without squash: view log
我使用git子樹添加而不使用squash選項將樹合並到我的存儲庫中。 git日志顯示提交已成功添加到存儲庫。 但是,如果我執行git log --follow filename
,則歷史記錄在合並處停止,並且不顯示先前的提交。 我嘗試使用-M
而不是--follow
,這也不起作用。 如何在合並之前獲取特定文件或文件的提交日志?
由git subtree merge
或git subtree add
創建的提交對來自子樹的文件執行“添加”,而不是“移動”。 這意味着無法像其他合並或移動一樣跟蹤其歷史記錄。
在合並之前直接查看子樹,仍然可以顯示所需文件的歷史記錄。 如果您的工作區是git subtree
創建的合並提交,那么它的第二個父級( HEAD^2
)將是原始子樹的最后一次提交。 從這里您可以看到原始子樹的內容:
# Display the contents of the original subtree
git ls-tree HEAD^2
通過此提交,您可以跟蹤您感興趣的文件的更改。 請注意,文件的路徑在工作區中的子樹中是不同的。 您需要刪除為git subtree
提供的--prefix
,以便為您的文件提供正確的路徑。
git log HEAD^2 --follow -- path-in-subtree/file
實際上, git log --follow
應該與子樹合並一起使用,但是已知它很長時間都是hackish [1-3]。
可以堅持使用子樹合並和休息,以確保該策略對於跟蹤多個歷史記錄是有效的,並耐心地等待git log --follow
將改善的不可避免的事件。 這實際上可能是一個可行的決定,因為目前git log --follow
可以在非常有用的情況下看到一些歷史記錄。 假設您將文件從頂級倉庫移動到子倉庫,然后它可以跟蹤完整的移動。 當您想要跟蹤特定於子倉庫的歷史記錄時,您必須擁有單獨的副本或簽出子倉庫分支。
您可以獲取這些文件的日志[1]:
git log -- '*filename' # from the toplevel
這將查看觸及名稱以filename
結尾的文件的每個提交。 它不會遵循實際的重命名,如果你有幾個具有相同basename [1]的文件,它可能會顯示誤報。
您還可以使用不同的策略合並存儲庫。 Ref [4]顯示了一種方法,它與常規子樹合並非常接近,但具有可追溯的歷史。 基本上,你:
git mv
將子repo文件分離到單獨的文件夾中 然后:
-Xsubtree
標志進行git merge。 [1]來自git郵件列表http://git.661346.n2.nabble.com/Bug-Files-are-losing-history-after-subtree-merge-td7597197.html
[2]來自git郵件列表http://git.661346.n2.nabble.com/gsoc-Better-git-log-follow-support-td6188083.html#a6188352
[3] git log --follow
已經在Google Summer of Code https://git.wiki.kernel.org/index.php/SoC2011Ideas#Better_git_log_--follow_support
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.