我知道这里有非常相似的问题,但它们并没有解决我的问题。也许有些地方我不太明白。
这是健身 (https://github.com/unclebob/fitnesse/) 提交历史记录的一部分:
* | | | | | | | | | | | | | | | fa86be8 Avoid possible issue when using CachingPage under heavy memory load.
|/ / / / / / / / / / / / / / /
* | | | | | | | | | | | | | | 7b4a07a Merge pull request #256 from barredijkstra/fitnesse_issue_250
|
| * | | | | | | | | | | | | | | ecf5891 Fixed test checking for OS specific exception message.
| * | | | | | | | | | | | | | | 082236e Added rendering of cause exceptions. Fix for unclebob/fitnesse#250
* | | | | | | | | | | | | | | | a92b37f Merge pull request #243 from amolenaar/fix/243-hash-table-rendering
我想要 2 个提交哈希之间的提交列表。在这种特殊情况下,我希望在 ecf5891
和 7b4a07a
之间进行提交,我希望结果是:
ecf5891
7b4a07a
到目前为止,我一直在使用git rev-list commit_hash_from_here^..commit_hash_up_to_here
,它与线性历史一起工作得很好。但是,在这种情况下,我得到了更多的提交。
我已经尝试过这个,它就像预期的那样工作:
git log --since='<date ecf5891>' --until='<date 7b4a07a>'
(我已经手动搜索了这两个日期)。
一种可能的解决方案是获取 2 个日期并这样做,但我认为应该有更好的方法。
编辑: 7b4a07a
父母ecf5891
和a92b37f
.到目前为止,如果我想从ecf5891
到7b4a07a
,解决方案工作正常,但如果我想从a92b37f
到7b4a07a
我想得到:
7b4a07a
ecf5891
082236e
a92b37f
但我不明白a92b37f
我认为您正在寻找--ancestry-path,在您的情况下:
git rev-list --ancestry-path 7b4a07a..ecf5891
涉及到git提交时,"Between"是一个有点滑溜的概念。
上面显示的文本以及图形输出片段显示了为什么from^..to
产生的不仅仅是这两个提交:to
部分是合并提交。
符号A..B
实际上只是B ^A
的简写。 也就是说,"一切从B
开始,向后工作,减去一切从A
开始,向后工作"。 但是B
是一个合并提交,所以"一切都从那里开始并向后工作"使用父项。
在这里,7b4a07a
的第一个父级是a92b37f
(不在上面的[原始]片段中,但我克隆了链接的存储库并找到了它)。 不过,我们可以象征性地提及它,我将在下面提及它。 7b4a07a
的第二个父级是ecf5891
,你感兴趣的"来自"部分。
当您要求:
ecf5891^..7b4a07a
这意味着:
7b4a07a ^ecf5891^
这与:
7b4a07a ^082236e
这让你的父母合并,然后从后面修剪掉082236e
所有内容。 您需要从7b4a07a^
(第一个父级)到返回的所有内容进行修剪:
git rev-list 7b4a07a ^ecf5891^ ^7b4a07a^
git log --oneline 7b4a07a ^ecf5891^ ^7b4a07a^
不过,一般来说,你必须弄清楚要砍掉哪个后代行。
编辑:您可以坚持使用A..B
符号,但确实需要添加额外的"排除"。 所以jthill的答案也有效,一旦你把帽子移到前面。
重新编辑您的编辑("如果我想从a92b37f
到7b4a07a
"):我们又回到了"之间"是一个滑溜溜的概念的问题。 哪些提交是"介于"之间的? 从 a92b37f
到 7b4a07a
有一条直线,因为a92b37f
是合并提交7b4a07a
的两个父级之一。 因此,按照前面的逻辑("直接在祖先行上提交",也许是"包容性"),那只是这两个提交中的一个,或者两个。 但是你说你想要两个在任何祖先意义上都与a92b37f
完全无关的提交。 为什么需要这两个特定的提交? 是什么让082236e
"有趣",而082236e^
,它的父母,"无趣"?
首先确定相关的 2 个提交哈希
,您需要使用git log --oneline
然后,您可以选择相关的两个提交哈希,并使用
git log <commit hash 1>..<commit hash 2> --oneline | cut -d " " -f 1
添加 ^7b4a07a~ 以排除从合并的第一个父级访问的所有内容。您只是排除了可从其第二个父级访问的内容。