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

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

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


当前回答

添加到现有的答案,可以创建一个别名来显示合并之前的差异和/或日志。许多答案省略了在“预览”合并之前首先要做的取回;这是一个将这两个步骤合并为一个步骤的别名(模拟类似于mercurial的hg传入/传出)

所以,在“git log ..”,您可以在~/中添加以下内容。gitconfig:

...
[alias]
    # fetch and show what would be merged (use option "-p" to see patch)
    incoming = "!git remote update -p; git log ..@{u}"

为了对称,可以使用以下别名来显示在push之前提交和将被push的内容:

    # what would be pushed (currently committed)
    outgoing = log @{u}..

然后你可以运行“git incoming”来显示大量的更改,或者“git incoming -p”来显示补丁(即“diff”),“git incoming -pretty=oneline”,用于简短的摘要,等等。然后你可以(选择性地)运行“git pull”来合并。(不过,因为你已经获取了,合并可以直接完成。)

同样,“git outgoing”显示了如果你要运行“git push”,将会推送什么。

其他回答

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

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

这些有帮助吗?

我发现最适合我的解决方案是只执行合并并在发生冲突时中止它。在我看来,这种特殊的语法干净而简单。这就是下面的策略2。

然而,如果你想确保你不会弄乱你当前的分支,或者你只是没有准备好合并而不管冲突的存在,简单地创建一个新的子分支并合并它:

策略1:安全的方法——合并一个临时分支:

git checkout mybranch
git checkout -b mynew-temporary-branch
git merge some-other-branch

这样,如果您只是想看看冲突是什么,您可以简单地丢弃临时分支。您不需要麻烦地“中止”合并,并且您可以回到您的工作—只需再次签出'mybranch',您将不会在分支中有任何合并的代码或合并冲突。

这基本上是一次演练。

策略2:当你确实想要合并时,但前提是没有冲突

git checkout mybranch
git merge some-other-branch

如果git报告冲突(且仅当存在冲突时),你可以这样做:

git merge --abort

如果合并成功,则不能中止它(只能重置)。

如果您还没有准备好合并,请使用上面更安全的方法。

[编辑:2016年11月-我把策略1换成了策略2,因为似乎大多数人都在寻找“安全的方式”。策略2现在更多的是说明,如果合并有您还没有准备好处理的冲突,您可以简单地中止合并。请记住,如果阅读评论!]

我尝试了这个东西来检查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-diff-tree -比较通过两个树对象找到的blob的内容和模式

Pull Request——我已经使用了大部分已经提交的想法,但我也经常使用的一个想法是(尤其是来自其他开发人员的想法)做一个Pull Request,它提供了一种方便的方法,可以在合并发生之前检查所有的更改。我知道这是GitHub不是git,但它肯定是方便的。