我有一个git分支(例如主线),我想合并到另一个开发分支中。还是我?
为了决定我是否真的想合并这个分支,我想看一些合并将做什么的预览。最好能够查看正在应用的提交列表。
到目前为止,我能想到的最好的是合并-no-ff -no-commit,然后diff HEAD。
我有一个git分支(例如主线),我想合并到另一个开发分支中。还是我?
为了决定我是否真的想合并这个分支,我想看一些合并将做什么的预览。最好能够查看正在应用的提交列表。
到目前为止,我能想到的最好的是合并-no-ff -no-commit,然后diff HEAD。
当前回答
这里的大多数答案要么需要一个干净的工作目录和多个交互步骤(不利于脚本编写),要么并不适用于所有情况,例如,过去的合并已经将一些突出的更改带入了目标分支,或者选择做同样的事情。
要真正了解如果你将开发合并到主分支中会发生什么变化,现在:
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很难实现。要小心了。
其他回答
也许这个能帮到你? git-diff-tree -比较通过两个树对象找到的blob的内容和模式
如果您和我一样,您正在寻找等价于svn update -n的文件。下面的方法似乎可以达到目的。请注意,请确保首先进行git获取,以便您的本地回购有适当的更新进行比较。
$ git fetch origin
$ git diff --name-status origin/master
D TableAudit/Step0_DeleteOldFiles.sh
D TableAudit/Step1_PopulateRawTableList.sh
A manbuild/staff_companies.sql
M update-all-slave-dbs.sh
或者如果你想要从你的脑袋到遥控器的差异:
$ git fetch origin
$ git diff origin/master
在我看来,这个解决方案比提出“合并然后中止”的顶部解决方案更容易,更不容易出错(因此风险更小)。
Git log currentbranch..otherbranch会给你一个提交列表,如果你进行合并,这些提交将会进入当前分支。log的常用参数提供了提交的详细信息,将为您提供更多信息。
Git diff currentbranch otherbranch会给你两个提交之间的差异,这将成为一个。这将是一个diff,它给出所有将被合并的东西。
这些有帮助吗?
我尝试了这个东西来检查visual studio代码中的更改。
从dev创建一个临时分支。然后合并你用——no-ff——no-commit标记修改了文件的分支。
git checkout dev
git checkout -b feature_temp
git merge feature --no-ff --no-commit
特性分支的更改文件将反映在feature_temp分支中。
这里的大多数答案要么需要一个干净的工作目录和多个交互步骤(不利于脚本编写),要么并不适用于所有情况,例如,过去的合并已经将一些突出的更改带入了目标分支,或者选择做同样的事情。
要真正了解如果你将开发合并到主分支中会发生什么变化,现在:
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很难实现。要小心了。