我知道这里有非常相似的问题,但它们并没有解决我的问题。 也许有些东西我不太了解。
这是fitnesse(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
答案 0 :(得分:26)
“介于”之间是一个有点滑的概念,当谈到git提交时。
上面显示的文字(带有图表输出片段)显示了为什么 from^..to
产生的不仅仅是那两个提交: to
part是合并提交。
符号 A..B
实际上只是 B ^A
的简写。也就是说,“一切都从 B
开始,向后工作,减去从 A
开始向后工作的所有内容”。但是 B
是一个合并提交,因此“从那里开始并向后工作的所有内容”都使用父母。
此处7b4a07a
的第一个父级是a92b37f
(不在上面的[原始]代码段中,但我克隆了链接的repo并找到了它)。我们可以象征性地引用它,我将在下面。 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's answer也可以,一旦你把帽子移到前面。
重新编辑(“如果我想从a92b37f
转到7b4a07a
”):我们又回到了“介于”这个滑溜概念的问题上。哪些提交是“之间”?从a92b37f
到7b4a07a
有一条直接线,因为a92b37f
是合并提交7b4a07a
的两个父项之一。因此,通过早期的逻辑(“直接在祖先线上提交”,也许是“包容性”),这两个提交中只有一个或两个提交。但是你说你想要两个在任何祖先意义上都没有与a92b37f
相关的提交。 为什么你想要那两个特定的提交?是什么让082236e
“有趣”和082236e^
,它的父母,“无趣”?
答案 1 :(得分:23)
我认为你正在寻找--ancestry-path,在你的情况下:
$ pip install bunch
答案 2 :(得分:3)
添加^ 7b4a07a~也可以排除从合并的第一个父级可以访问的所有内容。您只排除其第二个父母可以访问的内容。
答案 3 :(得分:3)
首先使用
确定在它们之间获取提交哈希列表所需的相关2个提交哈希值git log --oneline
然后,您可以选择相关的两个提交哈希,并使用
在它们之间找到提交哈希值git log <commit hash 1> <commit hash 2> --oneline | cut -d " " -f 1