几个Git提交中的更改摘要

时间:2011-01-24 15:55:11

标签: git github

我想得到几个不连续的Git提交中的更改摘要。这是一个例子:

  • 提交1:将更改A和B添加到alpha.html并将C更改为beta.html
  • 提交2:在beta.html中恢复了更改C
  • 提交3:将更改B替换为D并添加更改E

我希望得到这样的摘要:

  • 文件alpha.html有更改A,D和E(无需提及B)
  • 文件beta.html未更改

有可能吗? (它与Github中的Compare view非常相似。)

谢谢!

3 个答案:

答案 0 :(得分:3)

听起来像git diff给我。

git diff commit1 commit3

这将显示在这两个提交之间发生更改的文件名和行。 如果您从命令行使用git,我建议启用颜色。这将使diff输出更容易阅读:

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto

还有一些程序可以以图形方式显示diff输出。 (比如Linux中的 kompare

答案 1 :(得分:0)

嗯,你可以这样做:

for c in $commits; do
    echo $c
    git show --name-status $c
    echo
done

你可以编写脚本来让它变得更漂亮,更漂亮,直到你得到你想要的输出格式。将$commits替换为类似$(git rev-list --author=Me master..topic)的内容以转储到提交列表中。填满所有输出并将其重组为每个文件列表(awk会很擅长)。等等。

答案 2 :(得分:0)

我一直在寻找类似的东西,除了您的“非连续”要求。我可以共享它,以防它帮助来这里的人和我有相同的问题(类似于您的问题),或者可以使您离答案更近。

我有一个功能分支与master分支不同-即两个分支自上一个共同祖先以来都有新的提交,我想知道 feature 有什么变化如果合并到master分支将尝试引入。

git diff master feature不会执行我想要的操作,因为自从功能分支以来,master上的每个新更改都将显示为,因为该功能没有它。我只想看到在功能方面所做的积极工作。

git log --stat master..feature更加接近,它向我展示了由于每次与主功能不同而导致的每次提交更改的文件。但是,如果该功能具有数十个新提交,则仍然很难使用。

我想看到的是变更功能分支的“压缩”版本,相对于master而言,却忽略了自分支以来对master所做的更改。

这对我有用:

# get the commit ID of the last common ancestor
git merge-base feature master

# show the diff from that ancestor to the head of feature branch
# (works with --stat option too, to summarize changes)
git diff <ancestor ID> feature

# combined form:
git diff `git merge-base feature master` feature