【问题标题】:Show commits since branching from parent branch?显示自父分支分支以来的提交?
【发布时间】:2022-01-01 19:31:48
【问题描述】:

问题

有没有办法列出当前分支上完成的所有提交,因为它是从其父分支分支出来的?

示例

假设我在我的master 分支上并提交了AB,然后分支到一个新的feature-branch 并提交了CD:有没有办法列出只有CD

【问题讨论】:

标签: git branch commit


【解决方案1】:

Git 不记得父分支或分支开始的位置,但您可能会这样做:

假设我在我的master ...然后[创建] feature-branch 并提交CD:有没有办法只列出CD

如果您使用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)。 “绿色油漆”从你说你想要的提交开始:例如HEADfeature-branch。然后它从提交“向后”泛滥到父提交。

“红色油漆”从您说要拒绝的提交开始:master,或者在这种情况下提交B。然后它从提交“向后”泛滥到父提交。

红色“覆盖”绿色,或者等效地,我们先做红色而不重新绘制提交。因此,鉴于我们有:

A <-B   <-- master
     \
      C <-D   <-- feature-branch (HEAD)

这个“绘制BA红色”和“绘制CD绿色”因此您将看到列出的提交是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 指向的提交 ——在这种情况下是 BD,或者更高版本的 HD——并区分这两个提交。也就是说,git diff X..Ygit diff X Y 完全相同。

(还有一个三点语法,它对大多数 Git 命令有一个含义,而对于 git diff 有不同的特殊含义。所以git diff 总体上有点奇怪。)

【讨论】:

    【解决方案2】:

    根据您所说的,您应该使用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 在修订遍历代码中使用了三点符号以及一些额外的内部魔法。
    猜你喜欢
    • 2012-04-01
    • 2021-06-09
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多