How to apply diff between commits to current head in git?

梦想与她 提交于 2019-12-06 06:03:43

问题


I was working on some topic branch on project I participate in. I normally rebase my branches before making a pull request. This time however, due to changes in master, rebasing is a big pain. Lot of conflicts and, what's worse, after manual merging commits look just ugly and loose their point. I would definitely prefer to obtain diff between my branch's head and latest commit present on both branches, then apply this diff to master's head and finally create brand new shiny commits with git add -p. So my question is: how to achieve it? One possibility would be to simply merge master into my topic branch, but is there a more elegant solution? I believe yes.

Thanks for your help.

EDIT:

One file has been moved on master branch and my commits are altering this file (using it's old name).


回答1:


Use git cherry-pick --no-commit <commit>...

Then you will get all the changes in the listed commits applied on the top of your branch, and you can commit at your leisure.


If you have a more complicated use case, you might want to try git imerge

Its creator made an introduction blog post and a presentation about it. Both a bit old unfortunately.




回答2:


The answer already given is fine when it's consecutive commits you want to grab.

However, if what you want is a general answer for a way to apply the diff between ANY two chosen commits (as I did when I found this page), then it's not so useful.

In my case I did the following:

To give names to things, let's say I wanted to apply the diff from commit1 to commit2 onto branch1 as a single commit.

Note that commit1 could be an ancestor or a "descendant" of commit2, or neither.

So I do:

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


来源:https://stackoverflow.com/questions/13565177/how-to-apply-diff-between-commits-to-current-head-in-git

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!