【问题标题】:How to get changes between two branches and the commit ID that makes the changes如何获取两个分支之间的更改以及进行更改的提交 ID
【发布时间】:2018-03-07 03:53:51
【问题描述】:

我有两个分支(例如 test 和 master)。我已经对每个分支进行了一些提交,现在我想在测试分支中看到新的提交,而不是在主分支中。

目前我正在使用git log master..test 来查看在测试中而不是在 master 中的提交。它在大多数情况下运行良好,但是,它带来了一个问题。如果我已经从测试分支挑选了一些提交到主分支,由于它们的提交 ID 不同,git log 仍将显示已挑选的提交,即使两个分支之间实际上没有区别。

我现在正在考虑使用git diff master..test,此方法将比较两个分支的内容并给我“准确”的更改(它不会显示已被精心挑选的提交)。但是,这并没有给我想要的提交 ID。

所以我想知道是否有任何方法,也许是一些标签,可以显示两个分支之间的实际差异,同时显示哪个提交造成了这些差异?

UPDATE:由于我是用程序来实现的,所以不能先看区别,然后去git blame匹配内容,看看哪个commit负责。为此,我需要使用 grep 之类的东西,如果文本内容出现多次,它可能会多次匹配内容。所以我正在寻找一些从 diff 到提交 ID 的直接链接

【问题讨论】:

  • 看看git cherry。要了解git cherry 的实际工作原理,请查看gitrevisions 的对称差分部分,然后查看git log--cherry-* 选项。另请注意,仅git diff(好吧,忽略“组合差异”,这不是您想要的)比较两个特定的提交:git diff A..B 不查看git log --ancestry-path --boundary A..B 中的提交,它看起来仅限A,然后仅限B

标签: git github branch git-branch


【解决方案1】:

请使用git diff三点符号,即git diff [--options] <commit>...<commit>

来自手册页的引用:

git diff [--options] <commit>...<commit> [--] [<path>...]

此表单用于查看包含和直到第二个的分支上的更改,从两者的共同祖先开始。 “git diff A...B”等价于“git diff $(git-merge-base A B) B”。你可以省略 中的任何一个,其效果与改用 HEAD 相同。

【讨论】:

  • 好吧,这个方法可以给我两个分支之间的差异,但它不能告诉我是哪个提交造成了这些差异,还是我应该添加任何选项来使它工作?
  • @JekyllSONG, <commit1>...<commit2><commit1>..<commit2> 不同,它不会给出两个分支之间的差异,但会列出自 commit1 分支启动后发生在 commit2 分支上的更改.
  • 谢谢,这部分我明白了。但是接下来的问题是,有什么方法可以让我看到这个变化,哪个提交做出了这个变化?比如我删除一行commit,然后生成一个commit ID,当我使用git diff时,我会看到这条线是红色的,但是我可以知道是哪个commit删除了这条线吗?
  • @JekyllSONG, git blame 将显示文件的每一行最后修改的版本和作者。
  • 好的,更具体地说,我正在使用程序来实现这一点,例如gitpython。我假设通过使用git blame,我会查看文本内容并匹配 git blame 中的内容,但是如果我使用程序来实现这一点,可能会有多个匹配所以我认为还是有问题。跨度>
猜你喜欢
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2021-12-04
  • 2019-05-31
  • 2015-03-19
  • 2011-02-01
  • 2016-06-06
相关资源
最近更新 更多