我的存储库顶级层次结构如下所示:
/dir1
/dir2
/dir3
Run Code Online (Sandbox Code Playgroud)
我正在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
Run Code Online (Sandbox Code Playgroud)
网络上有很多很酷的东西,git log --oneline --first-parent db7c.. -- dir1/比如
abcb COMM-25 Fix latest
ba0f COMM-17 Some stuff
cda8 New files
Run Code Online (Sandbox Code Playgroud)
甚至git log --oneline --first-parent db7c..ba0f -- dir1/在两端进行限制
ba0f COMM-17 Some stuff
cda8 New files
Run Code Online (Sandbox Code Playgroud)
但是,天啊,我找不到任何可以帮助输出所有提交直至特定提交 id 的东西。我需要类似的git log --oneline --first-parent ..cda8 -- dir1/东西
cda8 New files
db7c COMM-9 Feature merge
e20a Init smth
<...>
Run Code Online (Sandbox Code Playgroud)
只有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/
Run Code Online (Sandbox Code Playgroud)
(请注意,我已经完成了您的最后一次尝试,省略了“ ..”)应该输出:
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/)>
Run Code Online (Sandbox Code Playgroud)
* git 中的“reachable”应该理解为“通过对给定提交的父级的递归探索可到达”