显示自父分支分支以来的提交?
Show commits since branching from parent branch?
问题
有没有一种方法可以列出在当前分支上完成的所有提交,因为它是从其父分支中分支出来的?
例子
假设我在 master
分支上并提交了 A
和 B
,然后分支到新的 feature-branch
并提交了 C
和 D
:有没有办法只列出 C
和 D
?
Git 不记得父分支或分支开始的位置,但您可能记得:
Let's say I'm on my master
... then [create] feature-branch
and made commits C
and D
: is there a way to list only C
and D
?
如果您使用 b1..b2
语法,git log
命令将显示在某些选定的 范围 中的提交,它是 b2 --not b1
。在这里你想要:
git log feature-branch --not master
或:
git log master..feature-branch
或:
git log master..HEAD
或:
git log master..
内部工作方式是 Git 将暂时“将某些提交涂成红色”(表示停止),将其他提交涂成“绿色”(表示开始)。 “绿色油漆”以您想要的提交开始:例如 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
——以及 diff那两个承诺。也就是说,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
解释:
这将显示 中包含的所有提交,尤其是 中不包含的所有提交。此外,如果省略最后一个参数,则将比较当前分支。 (有关详细信息,请参阅上面的文档)。
问题
有没有一种方法可以列出在当前分支上完成的所有提交,因为它是从其父分支中分支出来的?
例子
假设我在 master
分支上并提交了 A
和 B
,然后分支到新的 feature-branch
并提交了 C
和 D
:有没有办法只列出 C
和 D
?
Git 不记得父分支或分支开始的位置,但您可能记得:
Let's say I'm on my
master
... then [create]feature-branch
and made commitsC
andD
: is there a way to list onlyC
andD
?
如果您使用 b1..b2
语法,git log
命令将显示在某些选定的 范围 中的提交,它是 b2 --not b1
。在这里你想要:
git log feature-branch --not master
或:
git log master..feature-branch
或:
git log master..HEAD
或:
git log master..
内部工作方式是 Git 将暂时“将某些提交涂成红色”(表示停止),将其他提交涂成“绿色”(表示开始)。 “绿色油漆”以您想要的提交开始:例如 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
——以及 diff那两个承诺。也就是说,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
解释:
这将显示