如何在git中提交当前头之间的差异?

时间:2012-11-26 12:48:09

标签: git git-merge git-diff

我正在参与我参与的项目的某个主题分支。我通常在提出拉取请求之前重新分支我的分支。然而,这一次,由于主人的变化,变基是一个很大的痛苦。许多冲突,更糟糕的是,在手动合并提交之后,看起来只是丑陋而且松散了他们的观点。我肯定更愿意在我的分支头和两个分支上的最新提交之间获得差异,然后将这个差异应用于master的头部,最后使用git add -p创建全新的闪亮提交。所以我的问题是:如何实现它?一种可能性是简单地将master合并到我的主题分支中,但是有更优雅的解决方案吗?我相信是的。

感谢您的帮助。

修改

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

当你想要抓住连续提交时,answer already given很好。

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

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

为了给事物命名,假设我想将commit1commit2的差异应用到branch1作为单个提交。

请注意,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