我所问的与这个问题有点类似。然而,这并不能解决我的问题。我想列出在开始散列和结束散列之间存在的提交散列(包括开始和结束)。让我给予一个简单的例子。对于this仓库,如果我们转到master分支的提交历史,我希望提交在f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d
和d4bce13a443cf12da40a77c16c1e591f4f985b47
之间。所以我希望打印以下提交-
f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d
c286db365e7374fe4d08f54077abb7fba81dd296
0bb0526b70870d57cbac9fcc8c4a7346a4ce5879
a5a7f852e45c7cadc8d1524bd4d14a1e39785aa5
9a5c33b16d07d62651ea80552e8782974c96bb8a
d4bce13a443cf12da40a77c16c1e591f4f985b47
我最初做了这样的事情-git rev-list --reverse --remotes ^f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d^ HEAD --
,但它给了我不正确的结果。
在那之后,我做了这个git rev-list --reverse --ancestry-path f3b628f8f9c71a2cdfa052025c4a1ed78ee4c45d..HEAD
,它给了我除了第一次(开始)提交之外的所有正确的东西。
如果有人能在这方面帮助我,我将非常感激。另外,如果可能的话,请解释一下你使用的命令,以及它是如何只选择那些提交的。谢谢你。
2条答案
按热度按时间wz3gfoph1#
Git 2.38为
--ancestry-path
添加了一个可选参数,所以现在可以它从
base
和HEAD
开始,只列出从这两个tip开始的路径中带有base
的提交,但不包括 *base
的祖先 *。甚至更难理解(实际上并不是不可理解的,只是...是的,好吧,这是文字游戏,告我吧)用法可以得到得心应手。
在此添加之前,
--ancestry-path base^! tip
将包括base
,但如果是合并,则将显示base
的父节点的可从尖端到达的子节点,这些子节点没有通过base
追溯祖先。fkaflof62#
在上一个例子中,你几乎做到了,但是第一个哈希值是可以从它本身到达的,所以被排除了。
最常见的范围规范是双点语法。这基本上要求Git解析一个提交可访问但另一个提交不可访问的提交范围。
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
要包含
f3b628f
,请选择父提交:f3b628f^
。如果你在引用的末尾放一个^(插入符号),Git会将其解析为该提交的父提交。
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_ancestry_references
完整散列和短散列的工作原理相同:
如果您提供SHA-1哈希值的前几个字符,Git足够聪明,能够判断出您所指的提交是什么
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_short_sha_1
HEAD是指:
你也可以去掉语法的一部分,让Git使用HEAD。
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_short_sha_1