-
-
Save daveworth/2648163 to your computer and use it in GitHub Desktop.
git selective merge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Example: You have a branch 'refactor' that is quite different from master. You can't merge all of the | |
commits, or even every hunk in any single commit or master will break, but you have made a lot of | |
improvements there that you would like to bring over to master. | |
# on master | |
> git branch -m original_refactor refactor # <== completely optional but part of my flow | |
> git co -b temp | |
# on temp | |
> git merge --no-commit --no-ff refactor | |
# … which stages everything, so unstage | |
> git reset head | |
# start your merging | |
> git add --interactive | |
# The following is from an actual merge. | |
staged unstaged path | |
1: unchanged +1/-1 deploy_settings.py | |
2: unchanged +4/-3 requirements.txt | |
3: unchanged +2/-1 settings/defaults.py | |
4: unchanged +1/-1 settings/production.py.example | |
*** Commands *** | |
1: status 2: update 3: revert 4: add untracked | |
5: patch 6: diff 7: quit 8: help | |
What now> | |
# choose 'p' for patch. | |
staged unstaged path | |
1: unchanged +1/-1 deploy_settings.py | |
2: unchanged +4/-3 requirements.txt | |
3: unchanged +2/-1 settings/defaults.py | |
4: unchanged +1/-1 settings/production.py.example | |
Patch update>> | |
# enter the number next to the file you want to process first. | |
# you can keep entering numbers until you've selected all the files, | |
# or you can do them one at a time. an asterisk will appear next to | |
# the files you select. | |
# press 'enter' without entering a number (or anything) to continue | |
# to the next step. | |
# you will see a single diff hunk and it will ask you whether to stage | |
# it or not | |
diff --git a/deploy_settings.py b/deploy_settings.py | |
index 9b110f4..c5b228e 100644 | |
--- a/deploy_settings.py | |
+++ b/deploy_settings.py | |
@@ -4,7 +4,7 @@ This file holds the Fabric deployment settings for this project | |
from fabric.state import env | |
#env.project = 'my_project' #The name of this project | |
-#env.repo_base = '[email protected]:%s.git' % env.project | |
+#env.repo_base = '[email protected]:%s.git' % env.project | |
Stage this hunk [y,n,q,a,d,/,e,?]? | |
# y for yes, n for no | |
# … this will go on for every diff hunk in the selected files | |
# … until you get back to … | |
*** Commands *** | |
1: status 2: update 3: revert 4: add untracked | |
5: patch 6: diff 7: quit 8: help | |
What now> | |
# you can enter 's' to see what you changed | |
staged unstaged path | |
1: unchanged +1/-1 deploy_settings.py | |
2: +4/-3 nothing requirements.txt | |
3: +2/-1 nothing settings/defaults.py | |
4: unchanged +1/-1 settings/production.py.example | |
*** Commands *** | |
1: status 2: update 3: revert 4: add untracked | |
5: patch 6: diff 7: quit 8: help | |
What now> | |
# you can quit now, so enter 'q' | |
# then do some status and diff commands to explore the staged vs unstaged | |
# changes and make sure it looks like you expected. | |
# don't forget to git add or just rm any untracked files as appropriate | |
# finally… | |
> git commit -m "merged selected patches from refactor branch" | |
# don't do commit -a here… you only want to commit the staged changes | |
# revert unstaged changes | |
> git co . | |
# and merge to master | |
> git co master | |
> git merge temp | |
> git br -D temp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment