【发布时间】:2022-01-01 19:31:48
【问题描述】:
问题
有没有办法列出当前分支上完成的所有提交,因为它是从其父分支分支出来的?
示例
假设我在我的master 分支上并提交了A 和B,然后分支到一个新的feature-branch 并提交了C 和D:有没有办法列出只有C 和D?
【问题讨论】:
有没有办法列出当前分支上完成的所有提交,因为它是从其父分支分支出来的?
假设我在我的master 分支上并提交了A 和B,然后分支到一个新的feature-branch 并提交了C 和D:有没有办法列出只有C 和D?
【问题讨论】:
Git 不记得父分支或分支开始的位置,但您可能会这样做:
假设我在我的
master...然后[创建]feature-branch并提交C和D:有没有办法只列出C和D?
如果您使用b1..b2 语法(b2 --not b1 的缩写),git log 命令将显示在某些选定的提交范围 中的提交。在这里你想要:
git log feature-branch --not master
或:
git log master..feature-branch
或:
git log master..HEAD
或:
git log master..
这在内部工作的方式是 Git 将暂时“将某些提交涂成红色”(对于 STOP)和其他提交“涂成绿色”(对于 GO)。 “绿色油漆”从你说你想要的提交开始:例如HEAD 或feature-branch。然后它从提交“向后”泛滥到父提交。
“红色油漆”从您说要拒绝的提交开始:master,或者在这种情况下提交B。然后它从提交“向后”泛滥到父提交。
红色“覆盖”绿色,或者等效地,我们先做红色而不重新绘制提交。因此,鉴于我们有:
A <-B <-- master
\
C <-D <-- feature-branch (HEAD)
这个“绘制B和A红色”和“绘制C和D绿色”因此您将看到列出的提交是D,然后是C(按该顺序到期到 git log graph-walk 命令)。
master.. 语法是 master..HEAD 的缩写:只要您在两点语法的一侧留下名称,就表示 HEAD。
如果我们向master 添加更多提交(然后返回feature-branch):
A <-B <-E <-F <-G <-H <-- master
\
C <-D <-- feature-branch (HEAD)
“红色油漆”现在从 H 开始并返回到 B,所以这仍然有效。
注意:这种双点语法适用于许多 Git 命令,并且通常表示相同的意思。然而,对于git diff,它不是:git diff master..feature-branch 只是意味着找到master 指向的提交 并找到feature-branch 指向的提交 ——在这种情况下是 B 和 D,或者更高版本的 H 和 D——并区分这两个提交。也就是说,git diff X..Y 和 git diff X Y 完全相同。
(还有一个三点语法,它对大多数 Git 命令有一个含义,而对于 git diff 有不同的特殊含义。所以git diff 总体上有点奇怪。)
【讨论】:
根据您所说的,您应该使用cherry,这里是更深入了解它的文档:https://git-scm.com/docs/git-cherry
应该显示您正在查找的内容的命令:
git cherry -v <parent_branch> <targeted_branch>
# Given your example: git cherry -v master feature-branch
解释:
这将显示
【讨论】:
git cherry 在使用git cherry-pick 后特别有用。否则一个简单的git log 就足够了。请注意,git cherry 在修订遍历代码中使用了三点符号以及一些额外的内部魔法。