问题
I am on windows.
For various reasons we have multiple git instances of different svn branches.
Many times I want to fix an issue in repository A, generate a patch, and apply it to repository B. This works fine except if there are conflicts.
When rebasing I just right click the folder and use tortioseGit and select the resolve option. This brings up a nice gui to let me work through my conflicts.
Is there any way to accomplish this with rejected patch chunks?
Here is my current approach to creating/applying the patches
git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch
回答1:
To generate your patch do the following:
git format-patch --stdout first_commit^..last_commit > changes.patch
Now when you are ready to apply the patches:
git am -3 < changes.patch
the -3
will do a three-way merge if there are conflicts. At this point you can do a git mergetool
if you want to go to a gui or just manually merge the files using vim (the standard <<<<<<
, ||||||
, >>>>>>
conflict resolution).
回答2:
If you are frequently running into the same conflict set when applying patches, rebasing or merging then you can use git rerere (reuse recorded resolution) function. This allows you to pre-define how conflicts should be resolved based on how you resolved them in the past. See http://git-scm.com/blog/2010/03/08/rerere.html for details of how this works.
回答3:
TortoiseGit has a merge feature that can open patch files.
There's a picture of it here.
回答4:
My approach is:
- Create an "Integration"-Branch where the files are identical
- Apply the patch to this Integration-Branch
- Merge or rebase it to master (don't know if rebase is useful here, because I don't know what will happen when applying further patches)
来源:https://stackoverflow.com/questions/16190387/when-applying-a-patch-is-there-any-way-to-resolve-conflicts