我有一个git分支(例如主线),我想合并到另一个开发分支中。还是我?
为了决定我是否真的想合并这个分支,我想看一些合并将做什么的预览。最好能够查看正在应用的提交列表。
到目前为止,我能想到的最好的是合并-no-ff -no-commit,然后diff HEAD。
我有一个git分支(例如主线),我想合并到另一个开发分支中。还是我?
为了决定我是否真的想合并这个分支,我想看一些合并将做什么的预览。最好能够查看正在应用的提交列表。
到目前为止,我能想到的最好的是合并-no-ff -no-commit,然后diff HEAD。
当前回答
如果你已经获取了更改,我最喜欢的是:
git log ...@{u}
这需要git 1.7。x我相信。@{u}符号是上游分支的“速记”,因此它比git log…origin/master更通用。
注意:如果你使用zsh和扩展的glog,你可能需要做一些类似的事情:
git log ...@\{u\}
其他回答
如果你已经获取了更改,我最喜欢的是:
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分支中。
添加到现有的答案,可以创建一个别名来显示合并之前的差异和/或日志。许多答案省略了在“预览”合并之前首先要做的取回;这是一个将这两个步骤合并为一个步骤的别名(模拟类似于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”,将会推送什么。
Pull Request——我已经使用了大部分已经提交的想法,但我也经常使用的一个想法是(尤其是来自其他开发人员的想法)做一个Pull Request,它提供了一种方便的方法,可以在合并发生之前检查所有的更改。我知道这是GitHub不是git,但它肯定是方便的。