【问题标题】:show commits since branch creation显示自分支创建以来的提交
【发布时间】:2012-04-01 07:16:56
【问题描述】:

有没有办法使用git log 或其他命令仅查看创建分支后添加的提交?

usage: git log [<options>] [<since>..<until>] [[--] <path>...]
   or: git show [options] <object>...

    --quiet               suppress diff output
    --source              show source
    --decorate[=...]      decorate options

【问题讨论】:

标签: git git-log


【解决方案1】:

是的,可以将您的“新”分支与主分支(通常命名为:“master”)进行比较:

git log master..<your_branch_name>

当然,替换&lt;your_branch_name&gt;

【讨论】:

  • 这仅显示自您上次从 master 拉取以来的提交,反之亦然,这与显示分支创建以来的提交不同。
【解决方案2】:

我的原始答案不正确。你想要双点符号:

git log master..<your_branch_name>

我得到了与我预期不同的结果,因此我使用以下 repo 结构进行了测试:

a - - c - e - - g - i   master
  \ b - d / \ f - h     test

然后我尝试了git log master..test

f - h

然后git log master...test:

  - g - i
  f - h

所以双点显示test 中的提交,但不在master (^master temp) 中,三点显示mastertest 中的提交,但两者都没有。

这个问题的另一个很好的答案首先是正确的并且有更好的解释(https://stackoverflow.com/a/24769534/1185838);它可能应该被标记为答案而不是我的。您还可以参考这个答案 (https://stackoverflow.com/a/463027/1185838),它帮助我更好地理解双点符号和三点符号之间的区别。

为不正确的答案道歉!


旧答案 - 不正确

使用三个句点来引用第二个分支与第一个分支分歧的提交,或者在这种情况下您的分支与 master 分歧:

git log master...<your_branch_name>

请确保在这种情况下使用 三个句点。

旁注:您也可以省略分支名称,因为在这种情况下 git 会自动引用 HEAD 指针,例如:

git log master...

相当于我之前的示例。这适用于任何提交比较可用的地方。

【讨论】:

  • git log master... 对我不起作用,只有 git log master.. 起作用。注意两个点而不是三个
  • 很高兴它对你有用。 Double for 显然是正确的语法。但要小心,这些点很重要。有关双点符号和三点符号之间区别的详细说明,请参阅 Alan Thompson 的回答。
  • 这给了我奇怪的结果...虽然master..mybranch 给出了 1(并且自分支创建以来确实只有一次提交),但您的带有三个点的版本给了我 35。这 35 的来源是不清楚。看起来它计算了自分支创建以来在master 上发生的所有提交。或者可能同时在分支和主控上......
【解决方案3】:

完整文档在这里:https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html

假设您有一个如下所示的 repo:

base  -  A  -  B  -  C  -  D   (master)
                \
                 \-  X  -  Y  -  Z   (myBranch)

验证回购状态:

> git checkout master
Already on 'master'
> git status ; git log --oneline
On branch master
nothing to commit, working directory clean
d9addce D
110a9ab C
5f3f8db B
0f26e69 A
e764ffa base

对于我的分支:

> git checkout myBranch
> git status ; git log --oneline
On branch myBranch
nothing to commit, working directory clean
3bc0d40 Z
917ac8d Y
3e65f72 X
5f3f8db B
0f26e69 A
e764ffa base

假设您在 myBranch 上,并且您只想查看自 master 分支以来的更改。使用两点版本:

> git log --oneline master..myBranch
3bc0d40 Z
917ac8d Y
3e65f72 X

三点版本给出了从 master 的提示到 myBranch 的提示的所有更改。但是请注意,常见的提交 B 不包括在内:

> git log --oneline master...myBranch
d9addce D
110a9ab C
3bc0d40 Z
917ac8d Y
3e65f72 X

请注意:git loggit diff 行为不同! 行为并不完全相反,但差不多:

> git diff master..myBranch
diff --git a/rev.txt b/rev.txt
index 1784810..e900b1c 100644
--- a/rev.txt
+++ b/rev.txt
@@ -1 +1 @@
-D
+Z

> git diff master...myBranch
diff --git a/rev.txt b/rev.txt
index 223b783..e900b1c 100644
--- a/rev.txt
+++ b/rev.txt
@@ -1 +1 @@
-B
+Z

因此,两点版本显示了从 master 的尖端(即 D)到 myBranch 的尖端(Z)的差异。三点版本显示了从 myBranch 的底部(即 B)到 myBranch 的尖端 (Z) 的差异。

【讨论】:

  • 如果你愿意git log --oneline myBranch..master,那会给你DC吗?
  • 赞成描述 .. 和 ... 之间的区别并提供示例。很棒的答案!
  • 感谢您指出 log 和 diff 的行为不同(几乎相反)。为什么会这样?
【解决方案4】:

如果你在你创建的分支上:

git log master..

【讨论】:

    【解决方案5】:

    我可能是错的,但我认为 OP 中没有确切要求任何答案,所以我想添加一个新答案。我相信这与我遇到的问题完全相同,因为在其他源代码控制系统中这很容易做到。

    我在 MASTER 中有以下内容:

    '发展' | --> 'GP603'

    在 ORIGIN(我的本地系统)中,我有:

    'GP603' [从远程/GP603 分支克隆]

    然后我执行了 2 次不同的提交。第一次提交更改文件 X。第二次提交更改文件 X 和文件 Y。一天后,我想验证我对本地分支 ORIGIN/GP603 状态的假设。这就是我所做的,以验证我记得只有 2 次提交(实际上是分支上仅有的 2 次提交)

    $ git log origin/GP.603...

    (提交 2) 提交 b0ed4b95a14bb1c4438c8b48a31db7a0e9f5c940 (HEAD -> GP.603) 作者:xxxxxx 日期:星期三 xxxxx -0400

    1. Fixed defect where the format of the file names and paths were being added to HashTable in such a way that they would never be matched in any comparison.  This was an
    defect causing older failed files to never be moved to the correct directory (WindowsServiceApplication.cs)
    
    2. Removing worthless and contextless message as it does nothing but clog the log with garbage making it harder to read (DinoutFileHandler.cs)
    

    (提交 1) 提交 2c4541ca73eacd4b2e20d89f018d2e3f70332e7e 作者:xxxxxx 日期:10 月 xxxxx 周二 -0400

    In ProcessFile() function need to perform a .ToLower() on the file path string when adding it o the failedFiles collection.
    

    【讨论】:

      【解决方案6】:

      我经常陷入天哪,我做了什么的模式。具体来说,令人难以忘怀的恐惧与当前分支的最新变化有关。很高兴看到提交的责备游戏,我这样做如下。 (假设您在感兴趣的 current 分支中并且已经从 dev 分支出来。)

      git log --oneline dev..

      它为我提供了我所做的提交列表,以追溯到混乱、所多玛和戈莫拉不是现实的地方。此外,如果你像 LSD 上的 ADHD 猴子一样痴迷,它会有所帮助。获得轴承列表后,我可以缩小范围并按照this article 中的说明进行分析 - 底部有一节关于限制输出。

      【讨论】:

        【解决方案7】:

        这个命令对我很有效。我很感兴趣的是只看到在开始和结束 ref 之间的提交增量中发生变化的文件的名称,

         git log --no-merges --pretty=oneline --name-only <begin ref>..<end ref>
        

        这样的输出,

        <commit hash> <commit subject line>
        foo.txtr
        bar.txt
        

        【讨论】:

          猜你喜欢
          • 2022-01-01
          • 2017-09-07
          • 2021-04-30
          • 1970-01-01
          • 1970-01-01
          • 2011-05-30
          • 1970-01-01
          • 2021-06-09
          • 2015-10-09
          相关资源
          最近更新 更多