Ram*_*man 5 git version-control
说我有以下git repo:

我想指定所有branches(--all)的git rev-list 但是不包括给定的分支(比方说feature-D),但是我想显示共同的祖先feature-D和其他分支,即commit Initial和1.
如果我尝试git rev-list --all ^feature-D提交Initial并被1排除在外:

当然我可以列出除feature-Dexplicit(git rev-list feature-A feature-B feature-C)之外的所有分支以获得我想要的东西:

但有没有办法指定一个获取先前结果的转录列表,只能参考feature-D?
(请注意,这个问题的灵感来自于这个答案:https://stackoverflow.com/a/20978568/430128)
这有点间接,但似乎有效。我们从以下开始:
git rev-list --no-walk --all ^feature-D
Run Code Online (Sandbox Code Playgroud)
它生成由任何 ref 直接指向的所有 SHA-1 的列表(包括标签、分支、存储等;如果您只需要分支,则使用--branches而不是--all),除了下面的那些feature-D:
$ git log --oneline --decorate --graph --all
* 74e0d3e (feature-D) 7
* 0448a13 6
| * ab3a532 (feature-C) 5
|/
| * 50477c7 (feature-B) 4
| * 28717e5 3
|/
* 2ac5cef (HEAD, master, feature-A) 2
* c6a10b4 1
* 76c511f Initial
$ git rev-list --no-walk --all ^feature-D
ab3a5320e792e945b896634d667df5ace4a8b871
50477c7b28b5479587e45fe97292e71a3c0851c5
28717e5628ad111e8b68323dc485fd190a780446
Run Code Online (Sandbox Code Playgroud)
git rev-list 现在我们再次将其输入以获取历史行走:
$ git rev-list --no-walk --all ^feature-D | git rev-list --stdin
ab3a5320e792e945b896634d667df5ace4a8b871
50477c7b28b5479587e45fe97292e71a3c0851c5
28717e5628ad111e8b68323dc485fd190a780446
2ac5cefb971c7f5c5be33a77a6db71127982eaf5
c6a10b4568136d65b31b7e262ef7745db4962460
76c511fcf38076e0ea98db73a4923de6fc806b4a
Run Code Online (Sandbox Code Playgroud)
通过管道来git log --oneline --decorate --graph --stdin验证这些提交是否正确,如果目视还不够清楚的话:
* ab3a532 (feature-C) 5
| * 50477c7 (feature-B) 4
| * 28717e5 3
|/
* 2ac5cef (HEAD, master, feature-A) 2
* c6a10b4 1
* 76c511f Initial
Run Code Online (Sandbox Code Playgroud)
(还有一个旁注:如果使用git log --oneline --decorate --graph查看您的中间版本,即,git rev-list --all ^feature-D您需要添加--boundary才能看到提交2;gitk可能会添加--boundary以使其显示出来,而不是我测试过的)。
这里有一个缺陷:如果feature-C和feature-B分支不存在,您将看不到提交 2 到初始提交。我不确定,但我认为唯一真正的解决办法是使用更复杂的东西。
编辑:好的,没那么复杂。git for-each-ref从打印分支开始。通过管道grep -v ^feature-D$消除feature-D。现在您拥有了想要作为参数的所有分支:
$ git log --oneline --graph --decorate $(git for-each-ref \
> --format '%(refname:short)' refs/heads/ | grep -v '^feature-D$')
* ab3a532 (feature-C) 5
| * 50477c7 (feature-B) 4
| * 28717e5 3
|/
* 2ac5cef (master, feature-A) 2
* c6a10b4 1
* 76c511f Initial
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |