(Disclaimer: I am quite new to git so I may end-up making a mistake here!) Use-case:You are using a third-party software codes via its git repo. For some reason, say that software's developer does not have support for plugin or customization or the support for changes is limited. Somehow you need to make changes to codes but since changes are useful to you only, they rejects your pull requests. You still want to keep using this software and want to preserver your changes across future updates! Here comes git's stash tool to your rescue! Workflow:Our workflow will have mainly 3 steps:
#1. Saving local changesIf you have local-changes and if you decide to update your codes (git pull/git checkout to latest tag), its quite likely that git will give you a hint to either discard or stash your changes. Since you do not want to discard them, lets stash them using simply git stash Or git stash save "some useful name/comment" When you run a command like above, all your local changes gets saves to a stack. You don't need to worry about where this stack resides, or other internal details. You can imagine that your local modifications are stored in a blackhole! #2. Upgrade local codebaseThis involve mostly fetching remote changes and switching to latest tag (or branch if they don't like tagging). Since we are dealing with versions, I feel using git pull is not necessary. git pull does git fetch which is followed by git merger. As we are on a tag (which is not supposed to change by convention) there must be nothing to merge on it from remote. I generally use following set of commands for upgradation. YMMV. git fetch git tag -l git checkout #3. Reapplying local changes to latest codesSince that developer did not incorporated your changes, you will find latest codes do not have your customizations. You can reapply them using git stash apply Or specifying stash index (in case you did stash save many times) git stash apply stash@{2} To get exact index number, in case of multiple stash-saves, please use following command git stash list My changes got reapplied successfully without any issue. I guess depending on changes, we may need to do some adjustments as we do when doing merge. Bonus: Undoing Stash Apply!Just in case you applies wrong stash, or apply it on a wrong tag/branch, you will need a way to undo it. If you are maintaing only one stash, then simply run… git stash show -p | git apply -R OR specify stash index git stash show -p stash@{2} | git apply -R If you know any better way, feel free to share with us! (image credit: created in-house by our design Yogesh Daphane. Idea was mine!) Related posts:
-- This Post Managing local changes using "git stash" tool is Published on Devils Workshop . | |||
| |||
| |||
|
Monday, 6 August 2012
Managing local changes using “git stash” tool
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment