Resolving merge conflicts in Git: Difference between revisions
(Added tool explanation for stash) |
mNo edit summary |
||
Line 45: | Line 45: | ||
stash@{0}: On master: Saved changes for stash example | stash@{0}: On master: Saved changes for stash example | ||
'''git stash pop | '''git stash pop <stash@{#}>''': Removes the most recent stash or any stash specified and applies changes as a merge. If merge fails the stash is not removed from the list and must be removed manually. | ||
'''git stash apply | '''git stash apply <stash@{#}>''': Applies changes of recent stash or any stash is list specified, but doesn't remove it from the list. | ||
'''git stash drop | '''git stash drop <stash@{#}>''': Removes the most recent stash or any stash specified from the list. | ||
'''git stash clear''': Removes all stash's stored in the list | '''git stash clear''': Removes all stash's stored in the list |
Revision as of 21:57, 1 March 2011
Why would my Merge Fail?
There are 3 scenarios that could result in a Failed Merge.
- Changes are only in your working directory
- Changes are staged by not committed
- Changes are committed but Git could not resolve merge on its own
Tools
Tools and example output when in a merge conflict situation.
git status
The git status command provides an overview of all files that have been modified and are in conflict at the time of the merge.
Example:
# Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: <Some file> # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # unmerged: <file> #
- "Changes to be committed": All changes to files that are not affected by the conflict are staged.
- "Changes but not updated": All files that have conflicts that must be resolved before repository will be back to working order.
git stash
Stashes away any changes in your staging area and working directory. This command is useful in saving all changes not ready to be committed and the user wants to have an updated repository.
git stash save "<Save Message>": Save changes to files in working directory and staging area that git is aware of
git stash save "Saved changes for stash example" Saved working directory and index state "On master: Saved changes for stash example" HEAD is now at 4e2b407 Added second file for example.
git stash list: List the stashes that you currently saved
git stash list stash@{0}: On master: Saved changes for stash example
git stash pop <stash@{#}>: Removes the most recent stash or any stash specified and applies changes as a merge. If merge fails the stash is not removed from the list and must be removed manually.
git stash apply <stash@{#}>: Applies changes of recent stash or any stash is list specified, but doesn't remove it from the list.
git stash drop <stash@{#}>: Removes the most recent stash or any stash specified from the list.
git stash clear: Removes all stash's stored in the list
Scenarios
Git refuses to start a merge/pull
Error Messages:
- error: Entry '<fileName>' not uptodate. Cannot merge. (Changes in working directory)
- error: Entry '<fileName>' would be overwritten by merge. Cannot merge. (Changes staged, but not commited)
Steps toward Resolution:
- git stash save "<Message that describes what is being Saved>" (Stashes away any changes in your staging area and working directory in a separate index.)
- git status ( Verify all changes are staged)
- git stash list (Lists all stash's user has)
- git pull or git merge (Bring in changes from central repository or another branch)
- git stash pop (Will repopulate your changes into your working directory, maybe have to resolve merge conflicts)
Git is unable to resolve a merge/pull
Error Message:
CONFLICT (content): Merge conflict in <fileName> Automatic merge failed; fix conflicts and then commit the result.
Steps toward Resolution:
- git status (Shows all files that are in conflict as unmerged changed in working directory.)
- Resolve Merge confilicts
- git add <files>
- git commit -m "<Informative commit message>"