6

我正在参与我参与的项目的一些主题分支。我通常在提出拉取请求之前重新设置我的分支。然而这一次,由于 master 的变化,rebase 是一个很大的痛苦。很多冲突,更糟糕的是,在手动合并提交之后,看起来很丑陋并且失去了意义。我绝对希望获得我的分支的头部和两个分支上的最新提交之间的差异,然后将此差异应用到 master 的头部,最后使用git add -p. 所以我的问题是:如何实现它?一种可能性是简单地将 master 合并到我的主题分支中,但是有更优雅的解决方案吗?我相信是的。

谢谢你的帮助。

编辑

一个文件已移动到主分支上,我的提交正在更改此文件(使用它的旧名称)。

4

2 回答 2

12

采用git cherry-pick --no-commit <commit>...

然后,您将在分支顶部应用列出的提交中的所有更改,您可以在闲暇时提交。


如果您有更复杂的用例,您可能想尝试git imerge

它的创建者发表了一篇介绍性博客文章一个关于它的演示文稿。不幸的是,两者都有点老。

于 2012-11-26T12:51:15.160 回答
5

当您想要获取连续提交时,已经给出的答案很好。

但是,如果您想要的是在任何两个选择的提交之间应用差异的一般答案(就像我在找到此页面时所做的那样),那么它就没有那么有用了。

就我而言,我做了以下事情:

为了给事物命名,假设我想将 diff from commit1to应用为单个提交。commit2branch1

请注意,它commit1可能是 的祖先“后代” commit2,或者两者都不是。

所以我这样做:

git status     # Ensure working directory is clean, preferably no untracked files
git checkout -b temp-branch commit2
git reset --soft commit1
git commit -m "Everything from commit1 to commit2 as one commit"
git checkout branch1
git cherry-pick temp-branch
    # Confirm result is what you expect
git branch -D temp-branch
于 2018-03-02T00:10:56.203 回答