显示自分支创建以来的提交


76

有没有一种方法可以git log只使用在分支创建之后添加的提交来使用或其他命令查看?

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

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


Answers:


71

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

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

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

对于myBranch:

> 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上,并且只希望更改SINCE master。使用两点式:

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

三点版本提供了从母版技巧到myBranch技巧的所有更改。但是,请注意,不包含公共提交B:

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

请注意: git log并且git 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

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


如果您愿意git log --oneline myBranch..master,那会给您DC
MiniGod 2015年

3
赞成描述..和...之间的区别并提供示例。很棒的答案!
Gui Lima

感谢您指出log和diff的行为有所不同(几乎相反)。为什么会这样呢?
onlyanegg

67

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

git log master..<your_branch_name>

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

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

因此,双点表示testmaster^master temp)中提交,但不在()中,而三点表示在masterAND中的提交,test但两者均不在。

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

抱歉,答案不正确!


旧答案-不正确

使用三个句点来引用第二个分支与第一个分支偏离的提交,在这种情况下,您的分支与主分支偏离:

git log master...<your_branch_name>

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

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

git log master...

等同于我之前的示例。只要有提交比较就可以使用。


1
git log master...没有为我工作,只有git log master..工作。注意两个点而不是三个点
NecipAllef

很高兴它对你有效。Double for显然是正确的语法。但是要小心,点确实很重要。有关双点和三点表示法之间差异的详细说明,请参见Alan Thompson的答案。
马特·蒙

这给了我奇怪的结果...虽然master..mybranch给了1(并且自分支创建以来确实只有一次提交),但是带有三个点的版本给了我35。这35的来源不清楚。看起来它计算了master自创建分支以来发生的所有提交。也许既在分支机构上,又在大师级上……
Alexander Amelkin


4

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

git log master..<your_branch_name>

当然,请更换<your_branch_name>


5
这仅显示自您上次从master撤回以来的提交,反之亦然,这与自创建分支以来显示的提交不同。
spiffytech

0

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

我在MASTER中具有以下内容:

'开发'| ->'GP603'

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

'GP603'[从remote / GP603分支中清除]

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

$ git log origin / GP.603 ...

(提交2)提交b0ed4b95a14bb1c4438c8b48a31db7a0e9f5c940(HEAD-> GP.603)作者:xxxxxxx日期:周三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作者:xxxxxxx日期:周二十月xxxxx -0400

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

0

这个命令对我来说很好。我很感兴趣的是,仅看到在开始引用和结束引用之间的提交增量中已更改的文件的名称,

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

这样的输出

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

-1

亲爱的上帝,我经常陷入这种状态,我做了什么。具体来说,令人担忧的恐惧是关于当前分支机构的最新变化。看到提交的怪异游戏真是太好了,我如下。(假设您在当前感兴趣的分支中,并且已经从dev分支出来了。)

git log --oneline开发..

它提供了我所做的提交清单,以追溯到不存在混乱,鸡奸和戈莫拉的地方。同样,如果您像LSD上的ADHD猴子那样痴迷地进行操作,这也会有所帮助。一旦我有我的轴承名单,我可以缩小范围,并作为记录分析文章-有限制上,在底部的输出部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.