【发布时间】:2020-12-08 03:15:22
【问题描述】:
问题
使用 git,是否有一个内置命令可以给我一系列提交,从一个源提交到目标提交?
更多详情
假设我有一个历史有点复杂的回购:
* 175015a (HEAD -> master) Merge branch 'br1' # target commit
|\
| * bc03512 Merge branch 'br2' into br1
| |\
| | * 077f584 Merge branch 'br3' into br2
| | |\
| | | * 923b15a jjj
| | * | cec6734 iii
| | | * c8259a2 hhh
| | |/
| * | 45cb234 ggg
| | * b1dd3c7 Merge branch 'br3' into br2
| | |\
| | | * 48af382 fff
| | * | 778a504 eee # source commit
| | | * f918010 ddd
| | |/
| | * 9706f28 ccc
| |/
| * 483f665 bbb
|/
* 795fa22 aaa
* fd4bef2 first commit
出于某种原因,我想检查从提交eee 到当前HEAD 的提交序列。
我的意思是一系列提交,其中:
- 第一个提交是
target提交(在我的示例中为175015a (master)) -
n+1线上的每个提交都是n线上的提交的父级 - 最后一次提交是
source提交(在我的示例中为778a504 eee)
上面的例子:
# path illustration from the diagram above
175015a * 175015a (HEAD -> master) Merge branch 'br1' # target commit
bc03512 \-* bc03512 Merge branch 'br2' into br1
077f584 \-* 077f584 Merge branch 'br3' into br2
cec6734 * cec6734 iii
b1dd3c7 * b1dd3c7 Merge branch 'br3' into br2
778a504 * 778a504 eee # source commit
可以接受。
我正在寻找一组选项以传递给 git rev-list 或 git log 或任何其他 git 命令。
我尝试过的事情
git log 有很多选择,但我没有找到我想要的:
-
如果我运行
git log 778a504..master,它会保留许多不在两次提交之间的提交(例如,会提到提交fff和ddd) -
如果我还添加
git log --ancestry-path 778a504..master,一些“寄生虫”提交会被删除,但我仍然会得到两个提交之间的所有合并分支(在示例中:我会同时得到hhh和jjj一方面,另一方面iii,我希望只有这两组提交中的一个) -
如果我从
master开始使用git log --first-parent 778a504..master:我无法在图中最左边的行之外进行提交(我只会得到master) -
有些路径必然会通过合并提交,所以我不想排除它们:也没有
--no-merges
注意:建议为重复的答案表示使用--no-merges,也可能使用--first-parent,所以它不适合这个问题。
【问题讨论】:
-
您使用哪个命令来获取您显示的提交图?
-
git log --oneline --graph -
为什么这还不是您问题的答案?我不太明白你在问什么。
-
我的意思是,
git log source..target有什么问题? -
ah :您将获得所有合并提交和其间的分叉分支。我想强调一个单一的路径。
标签: git