一个`git log`标记的提交仅如何提交?

大卫·钱伯斯

我想要git logmaster分支上的所有带标记的提交(无标记的提交都没有)。这可能吗?

星期二

解决这个问题的秘诀是认识到git log使用与相同的规则git rev-list后一个命令有一个--tags标记来查看标记。因此,与到目前为止的其他答案一样,如果您愿意查看所有带标记的提交,则可以使用以下单个命令:

git log --no-walk --tags

(这样--no-walk可以防止从标签开始,并找到他们所有的父提交,以及父母的父母,等等。)

但是您要求“在master分支上标记的提交”,我认为(用技术术语来说)意味着“既由标记指向的提交可以通过master分支到达的提交”。这实际上要困难得多(git rev-list可以通过设置联合--stdin --no-walk,但似乎没有办法设置交集)。以下是找到正确的提交ID的几种方法,但有很多缺点:

  1. 首先创建两个文件列表:“所有带标记的提交”和“所有可从主机访问的提交”:

    git rev-list --tags --no-walk > /tmp/all-tags
    git rev-list master > /tmp/all-master
    

    现在只打印仅在两个文件中都显示的行。comm实用程序可以执行此操作。据记载,期望对文件进行排序,但是在我所看到的所有实现中,文件只需要保持相同的顺序,因此无需预先排序即可工作:

    comm -12 /tmp/all-tags /tmp/all-master
    

    缺点:需要两个临时文件(除非您使用使用的特殊bash语法/dev/fd);如果不进行排序,可能无法工作;要求comm

  2. 与之前相同,但用于uniq -d产生列表。这确实确实需要排序,但可以消除使用管道的临时文件:

    (git rev-list --tags --no-walk; git rev-list master) | sort | uniq -d
    

    缺点:需要排序。提交的顺序有些奇怪,而不是您通常会看到的顺序git log

  3. 编写您自己的实用程序,该实用程序基本上comm会执行方法将执行的操作,但是会git rev-list自行调用(也许是一个脚本,该脚本使用临时mktemp名称创建临时文件)。

    缺点:需要做很多工作。:-)

在所有情况下,一旦有了提交ID列表,您只需要将它们传递给git log --no-walk,例如:

git log --no-walk $(comm -12 /tmp/all-tags /tmp/all-master)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Git仅合并开发分支的最后一个提交

来自分类Dev

git日志范围,但仅包含一个提交路径

来自分类Dev

更新一个git提交

来自分类Dev

如何检查另一个分支的Git提交?

来自分类Dev

git log:仅显示昨天的提交

来自分类Dev

Git提交,如何将一个提交分成两个

来自分类Dev

NHibernate / Transaction如何仅提交一个对象而不提交整个会话

来自分类Dev

如何在一个提交中“覆盖”另一个仓库的git仓库

来自分类Dev

使用git提交一个名为“ .git”的目录

来自分类Dev

Git:如何将一个提交融合到另一个提交中?

来自分类Dev

仅将一些提交推送到另一个git存储库

来自分类Dev

如何在特定提交之前git checkout一个提交

来自分类Dev

如何编辑/修改Git中最后一个提交之前的提交消息?

来自分类Dev

Git:如何从另一个存储库导入提交并取消提交?

来自分类Dev

从另一个GIT项目的特定提交创建一个GIT项目

来自分类Dev

如何使用git log仅显示提交者的文件名

来自分类Dev

如何使用git log仅显示提交者的文件名

来自分类Dev

通过GitHub API在Git标签中获取所有提交,仅返回第一个提交

来自分类Dev

Git:检出一个分支,保留未提交的更改

来自分类Dev

git rebase带我到一个独立的提交

来自分类Dev

无法提交一个空的git repo

来自分类Dev

Git Merge提交到一个孤儿分支

来自分类Dev

git checkout一个无分支的提交

来自分类Dev

git rebase带我到一个独立的提交

来自分类Dev

git branch stash提交到一个

来自分类Dev

Git Immersion Labs 16,创建一个还原提交

来自分类Dev

如何列出自上一个Subversion标记以来的所有提交?

来自分类Dev

如何列出自上一个Subversion标记以来的所有提交?

来自分类Dev

git cherry选择一个提交到另一个分支

Related 相关文章

  1. 1

    Git仅合并开发分支的最后一个提交

  2. 2

    git日志范围,但仅包含一个提交路径

  3. 3

    更新一个git提交

  4. 4

    如何检查另一个分支的Git提交?

  5. 5

    git log:仅显示昨天的提交

  6. 6

    Git提交,如何将一个提交分成两个

  7. 7

    NHibernate / Transaction如何仅提交一个对象而不提交整个会话

  8. 8

    如何在一个提交中“覆盖”另一个仓库的git仓库

  9. 9

    使用git提交一个名为“ .git”的目录

  10. 10

    Git:如何将一个提交融合到另一个提交中?

  11. 11

    仅将一些提交推送到另一个git存储库

  12. 12

    如何在特定提交之前git checkout一个提交

  13. 13

    如何编辑/修改Git中最后一个提交之前的提交消息?

  14. 14

    Git:如何从另一个存储库导入提交并取消提交?

  15. 15

    从另一个GIT项目的特定提交创建一个GIT项目

  16. 16

    如何使用git log仅显示提交者的文件名

  17. 17

    如何使用git log仅显示提交者的文件名

  18. 18

    通过GitHub API在Git标签中获取所有提交,仅返回第一个提交

  19. 19

    Git:检出一个分支,保留未提交的更改

  20. 20

    git rebase带我到一个独立的提交

  21. 21

    无法提交一个空的git repo

  22. 22

    Git Merge提交到一个孤儿分支

  23. 23

    git checkout一个无分支的提交

  24. 24

    git rebase带我到一个独立的提交

  25. 25

    git branch stash提交到一个

  26. 26

    Git Immersion Labs 16,创建一个还原提交

  27. 27

    如何列出自上一个Subversion标记以来的所有提交?

  28. 28

    如何列出自上一个Subversion标记以来的所有提交?

  29. 29

    git cherry选择一个提交到另一个分支

热门标签

归档