我有一个git分支(例如主线),我想合并到另一个开发分支中。还是我?

为了决定我是否真的想合并这个分支,我想看一些合并将做什么的预览。最好能够查看正在应用的提交列表。

到目前为止,我能想到的最好的是合并-no-ff -no-commit,然后diff HEAD。


当前回答

也许这个能帮到你? git-diff-tree -比较通过两个树对象找到的blob的内容和模式

其他回答

Git日志..将被合并到当前分支的变更的其他分支列表。 Git差异…Otherbranchdiff从共同祖先(合并基)到将要合并的对象的头部。注意这三个点,与两个点相比,这三个点具有特殊的意义(见下文)。 gitk……上次合并后的分支的其他分支图形表示。

空字符串意味着HEAD,所以这就是为什么…而不是HEAD..otherbranch。

两点和三点对于diff和列出修订的命令(log、gitk等)的含义略有不同。对于log和其他两个点(a..b)意味着所有在b中但不是a的东西,三个点(a..b)意味着所有在a或b中只有一个的东西。但diff工作有两个修订,其中由两个点(a..b)表示的更简单的情况是a到b的简单差异,三个点(a..b)意味着共同祖先和b之间的差异(git diff $(git merge-base a b)..b)。

如果你已经获取了更改,我最喜欢的是:

git log ...@{u}

这需要git 1.7。x我相信。@{u}符号是上游分支的“速记”,因此它比git log…origin/master更通用。

注意:如果你使用zsh和扩展的glog,你可能需要做一些类似的事情:

git log ...@\{u\}

也许这个能帮到你? git-diff-tree -比较通过两个树对象找到的blob的内容和模式

Git log currentbranch..otherbranch会给你一个提交列表,如果你进行合并,这些提交将会进入当前分支。log的常用参数提供了提交的详细信息,将为您提供更多信息。

Git diff currentbranch otherbranch会给你两个提交之间的差异,这将成为一个。这将是一个diff,它给出所有将被合并的东西。

这些有帮助吗?

这里的大多数答案要么需要一个干净的工作目录和多个交互步骤(不利于脚本编写),要么并不适用于所有情况,例如,过去的合并已经将一些突出的更改带入了目标分支,或者选择做同样的事情。

要真正了解如果你将开发合并到主分支中会发生什么变化,现在:

git merge-tree $(git merge-base master develop) master develop

因为这是一个管道命令,它不会猜测你的意思,你必须明确。它也不着色输出或使用您的分页器,所以完整的命令将是:

git merge-tree $(git merge-base master develop) master develop | colordiff | less -R

——https://git.seveas.net/previewing-a-merge-result.html

(感谢David Normington提供的链接)

注:

如果你会得到合并冲突,他们会在输出中显示通常的冲突标记,例如:

$ git merge-tree $(git merge-base a b ) a b 
added in both
  our    100644 78981922613b2afb6025042ff6bd878ac1994e85 a
  their  100644 61780798228d17af2d34fce4cfbdf35556832472 a
@@ -1 +1,5 @@
+<<<<<<< .our
 a
+=======
+b
+>>>>>>> .their

用户@dreftymac提出了一个很好的观点:这使得它不适合编写脚本,因为您不能轻易地从状态代码中捕获它。根据不同的环境,冲突标记可能有很大的不同(删除vs修改,等等),这也使得grep很难实现。要小心了。