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

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

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


当前回答

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

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

这些有帮助吗?

其他回答

如果您和我一样,您正在寻找等价于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 ...@{u}

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

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

git log ...@\{u\}

除了以一种丢弃的方式实际执行合并之外(参见Kasapo的回答),似乎没有一种可靠的方式来看待这一点。

话虽如此,这里有一个稍微接近的方法:

git log TARGET_BRANCH...SOURCE_BRANCH --cherry

这很好地说明了哪些提交将进入合并。要查看diff,请添加-p。要查看文件名,可以添加——raw、——stat、——name-only、——name-status中的任意一个。

git diff TARGET_BRANCH的问题…SOURCE_BRANCH方法(参见Jan Hudec的回答)是,如果您的源分支包含交叉合并,则您将在目标分支中看到已经发生的更改的差异。

我尝试了这个东西来检查visual studio代码中的更改。

从dev创建一个临时分支。然后合并你用——no-ff——no-commit标记修改了文件的分支。

git checkout dev 
git checkout -b feature_temp 
git merge feature --no-ff --no-commit

特性分支的更改文件将反映在feature_temp分支中。

I do not want to use the git merge command as the precursor to reviewing conflicting files. I don't want to do a merge, I want to identify potential problems before I merge - problems that auto-merge might hide from me. The solution I have been searching for is how to have git spit out a list of files that have been changed in both branches that will be merged together in the future, relative to some common ancestor. Once I have that list, I can use other file comparison tools to scout things out further. I have searched multiple times, and I still haven't found what I want in a native git command.

以下是我的解决方案,希望对其他人有所帮助:

在这个场景中,我有一个名为QA的分支,自上一个产品发行版以来,它有许多更改。我们的最后一个产品版本被标记为“15.20.1”。我有另一个名为new_stuff的开发分支,我想合并到QA分支中。QA和new_stuff都指向“跟随”(由gitk报告)15.20.1标记的提交。

git checkout QA
git pull
git diff 15.20.1 --name-only > QA_files
git checkout new_stuff
git pull
git diff 15.20.1 --name-only > new_stuff_files
comm -12 QA_files new_stuff_files

下面是一些关于为什么我对这些特定文件感兴趣的讨论:

我如何信任Git合并?

https://softwareengineering.stackexchange.com/questions/199780/how-far-do-you-trust-automerge