我的repo顶级层次结构如下所示:
/dir1
/dir2
/dir3
我在HEAD
和git log --oneline --first-parent -5 -- dir1/
给出如下内容:
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
网上有很多很酷的东西,比如git log --oneline --first-parent db7c.. -- dir1/
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
甚至git log --oneline --first-parent db7c..ba0f -- dir1/
限制在两端
ba0f COMM-17 Some stuff
cda8 New files
但是,地狱,我找不到任何可以帮助输出所有提交UP TO特定提交ID的东西。我需要像git log --oneline --first-parent ..cda8 -- dir1/
这样的东西
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
<...>
只有cda8
哈希。上面的最新命令当然是伪代码,在现实生活中不提供任何输出(不幸的是:))。
那么,如何在不更改HEAD的情况下列出特定目录中的所有提交以及给定的提交ID(包括)之前的提交?
我想我可以接受修改dir1内容(仅限dir1,不接触dir2和dir3!),但是执行git checkout cda8 dir1/
或git reset cda8 dir1/
对随后的git log <...> -- dir1/
输出没有任何影响。
请帮忙,git大师!
我觉得你在这里努力了,这就是让你无法看到隐藏在视线中的解决方案的原因。
你要求的是在给出refspec时的标准日志行为。它将记录从该点可到达的所有提交历史记录:
git log --oneline --first-parent cda8 -- dir1/
(注意我已经完成了你的最后一次尝试,省略了“..
”)应输出:
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
...
<follows ALL the rest of commits history (but only those which have modified dir1/)>
* git中的“可达”应理解为“通过递归探索给定提交的父母可以访问”