在git中记录前10个


89

两个问题:

  1. 如何从头到尾显示git中的前10个提交。(无分支)
  2. 如何指定提交索引并记录它。(显示第二或第三)

我知道git使用parent链接提交,很容易从头到尾记录提交。喜欢:git log HEAD~10

但是我需要从头到尾进行查询,这可能吗?



滚动到@kostix答案
穆罕默德·乌默尔

Answers:


59

只需使用一种行格式记录所有内容并尾随输出:

git log  --pretty=oneline | tail -n 10 

大!这就是寻找的东西。谢谢@CharlesB。
yohan zhou

3
或者,用于git rev-list HEAD | tail -n 10获取要列出的10个ID,然后您可以按照自己喜欢的格式显示它们(不限于单行方法)。
torek 2012年

15
tail似乎失去了我在git控制台中获得的漂亮颜色。像git log --oneline -10在其他答案中一样传递参数,按我的预期工作。
James Hulse 2015年

4
显然,这是Unix的硬核方式。请参阅@kostix答案。
9301293

1
这种方法的缺点是我只能看到推送的提交。
杰克(Jack)

245
git log -10

将显示10个与修订规范匹配的最新提交(缺少规范意味着“所有提交”)。

参见联机帮助页:

git help log

部分 Commit Limiting

-<number>, -n <number>, --max-count=<number>
    Limit the number of commits to output.

6
简单,并且不依赖于tail平台上的可用性。
tenpn 2012年

8
&不会混淆git格式/颜色。这应该是公认的答案x100
kuzyn

10
不是操作者想要的:他想要first10,而不是latest
Timo

1
@Timo,很可能是的,但是如上所述的问题是可以解释的,很多人似乎只是因为这些不同而最终拒绝了我的回答。因此,尽管我在技术上同意您的观点,但我还是应该保持现状;-)在技术上正确的建议中,我最喜欢torek对已接受答案的评论。
kostix

就我而言,@ kostix“如何从头到尾显示git中的前10个提交”对我来说并不是“开放的解释”。显然,它要求的是 10次​​提交,而不是最新的
鲍比·杰克

29

这是我的方法

要获得前10次提交:

git log -n 10

-n是数字

附加 要获得下10个提交,请跳过前10个:

git log --skip=10 -n 10

我认为这应该是正确的答案。用尾巴将导致--graph停在git的日志工作
relief.melone

这必须是公认的答案。对我来说就像是一种魅力
Doogle '19

您也会使用尾部在控制台上丢失字体颜色。这是正确的答案
CESCO

14

要获取最近的10次提交:

git log HEAD~10..HEAD

要使它们按从旧到新的顺序排列:

git log --reverse HEAD~10..HEAD

请注意,如果存在合并,则可能显示超过10次提交。加--first-parent,如果你只希望通过每个分支的第一个父遍历。

有关更多详细信息,请参见的文档git rev-list


编辑:上面您已经得到了一个有用的答案,可以“在历史的开始附近显示提交”(再次,请参见有关回购中多个未连接的提交DAG的警告)。但是您也可以这样做,例如:

git log --no-walk `git rev-list HEAD | tail -n 10`

和:

git log --no-walk `git rev-list --reverse HEAD | head -n 10`

根据您想要结果的顺序。


谢谢你的答复。但是我不需要最后的10次提交,而是第一次。具体来说,如果提交是ABCDEFG(HEAD)。如何通过索引2记录ABC和如何记录C?
yohan zhou 2012年

哦! 不能保证只有一个“第一次提交”,但是如果有的话,请参阅添加的@CharlesB链接。
torek 2012年

办法可以行得通。任何自然的方式?git log --pretty = oneline | wc -l git log
HEAD〜

感谢你的回答。这就是我需要避免在git别名中使用'-10'样式选项的原因。接受数字参数。
vicTROLLA

11

最好的结果来自两个最佳答案的结合:

git log --pretty=oneline -10

1
谢谢,我使用它作为git别名来快速显示最近的提交,而无需填充终端。我叫别名lkj = log --pretty=oneline --abbrev-commit -10。现在,我意识到它不能回答OP的问题,但是我来这里是为了寻找简单的数字开关。
Paul Rougieux

4

只需将所有内容反向记录为-1表示列出一个日志

git log  --reverse -1


0

因为...更多细节:p

  1. 如何从头到尾显示git中的前10个提交。(无分支)
  2. 如何指定提交索引并记录它。(显示第二或第三)

通过(无分支),您可能要问的是reflog而不是任何给定的祖先链。以下内容与您所在的分支无关。

git log -g --pretty=oneline | tail -10

<sha> HEAD@{###}: action: summary (old)
<sha> HEAD@{###}: action: summary (older)
...
<sha> HEAD@{###}: action: summary (oldest)
  • -gis --walk-reflogs而不是遍历提交祖先链,而是遍历reflog条目。
  • 添加|cut -d ' ' -f 2|tr -d ':' > log以仅记录reflog提交索引。

以下内容将显示当前已签出分支的最早祖先。

git log --reverse --pretty=oneline | head -10 | cat -n

1 <sha> summary (oldest)
2 <sha> summary (second)
  • --reverse 以相反的顺序输出提交。
  • 不能简单使用,-n 10否则-10会损坏--reverse
  • cat -n 添加行号(提交索引?)


0

如果有人想要的不仅仅是git单行日志:

git log --reverse | awk 'NR>1 {print last} {last=$0}; /^commit/ && ++c==11{exit}'

其中,11在年底应设置为1比你想提交的数目。

正如这里指出的那样,git log --reverse -n 10它并不能满足您的需求。(我想它必须是非可交换的,以便您能够以相反的顺序选择前10个提交或后10个提交 🤪)

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.