Chr*_*and 58 git git-history-graph
Git是快照的DAG,图上的每个节点都代表一个提交.每个提交都可以有'n'个父提交.
鉴于任何两个提交,是否有一种简洁的方法来识别DAG中这两者的"顺序". git rev-list
似乎是最有希望的,但我似乎无法找到正确的咒语.
理想情况下,我会有以下内容
$ git related hash1 hash2
hash1 is ancestor of hash2
Run Code Online (Sandbox Code Playgroud)
要么
hash2 is ancestor of hash1
Run Code Online (Sandbox Code Playgroud)
要么
hash1 unrelated to hash2
Run Code Online (Sandbox Code Playgroud)
要么
hash1 is equal to hash2
Run Code Online (Sandbox Code Playgroud)
小智 69
git merge-base --is-ancestor <commit1> <commit2>
找到答案的方法不止一种.最简单的是使用
git merge-base --is-ancestor <commit> <commit>
Run Code Online (Sandbox Code Playgroud)
从以下文档git merge-base
:
Run Code Online (Sandbox Code Playgroud)--is-ancestor
检查第一个
<commit>
是否是第二个的祖先,<commit>
如果为true则退出状态0,否则退出状态1.错误由非零状态发出信号,该状态不为1.
...
符号的git log另一种选择是使用git log
并使用三点符号...
来告诉Git输出子提交的集合并减去集合交集.基本上,它告诉您一组提交如何相互分离:
$ git log --oneline --graph --left-right \
--first-parent --decorate <commit1>...<commit2>
Run Code Online (Sandbox Code Playgroud)
上面的命令将显示在集合操作方面可以从commit1
或commit2
但不能同时到达的提交,即C1 UNION C2-C1 INTERSECTION C2.
如果提交都不是另一个的父级,你将看到两者的子提交,但如果一个是另一个的祖先,你将只看到后代提交的输出,因为祖先包含在路径中后代的,因此被排除在输出之外.
您可以git log
从以下资源中阅读更多关于和三点符号的信息:
git-rev-list(1)似乎可以用来回答这个问题.另一种方法是简单地将临时分支标签附加到要测试的提交,然后使用以下--contains
选项git branch
:
git branch --contains <commit-to-test>
Run Code Online (Sandbox Code Playgroud)
输出将是在提交树中某处包含提交的所有分支,因此通过在另一个提交上使用临时分支,您可以查看您正在测试的提交是否是祖先.
从文档:
Run Code Online (Sandbox Code Playgroud)--contains [<commit>]
仅列出包含指定提交的分支(如果未指定,则为HEAD).
以下shell脚本可能会起到作用:
if git rev-list $SHA1 | grep -q $SHA2 ; then echo "$SHA2 is ancestor of $SHA1"
elif git rev-list $SHA2 | grep -q $SHA1 ; then echo "$SHA1 is ancestor of $SHA2"
else echo "$SHA1 unrelated to $SHA2" ; fi
Run Code Online (Sandbox Code Playgroud)
或者,整齐地将其包装成一个git别名:
git config --global alias.related '!function git_related() { if git rev-list $1 | grep -q $2 ; then echo "$2 is ancestor of $1" ; elif git rev-list $2 | grep -q $1 ; then echo "$1 is ancestor of $2" ; else echo "$1 unrelated to $2" ; fi } ; git_related $1 $2'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8912 次 |
最近记录: |