I'll admit that git sometime baffles me, and I muddle my way through it. That isn't to say that I don't like using it, or it's not valuable, just that I don't have an encyclopedic knowledge of everything about git. However, an opportunity recently came up to expand my knowledge of git:

I have been trying to make some more open source contributions recently. For one of the projects, I had to make some minor changes to the web.config and csproj files in order to get it working on my local machine. No big deal, except that these are changes that I don't want to commit to my fork, and certainly not to the upstream project.

What I could do is simply copy these changes into a text file somewhere, merge with the upstream project, and then copy/paste the changes so I could go back to work. That's an okay workaround, but it turns out that using git stash might be a better solution. git stash simply takes all the changes to files and stores them "away" into a stash list.

Here's an example, starting with the two files that I modified to get the site working, but don't want to actually commit:

Now, I'll stash everything by using "git stash". After a git stash, if you type "git status", you'll see that the working directory is "clean": no pending changes. If you then type "git stash list", you'll see a list of all your stashes (which is just one, right now).

So, now that my working directory is clear, I can go ahead and, say, "git merge upstream" or something like that without any problem. Once that merge is done, I can bring back the changes with "git stash apply" or, more explicity, "git stash apply [email protected]{0}", bringing back my working changes.

So that's kinda convenient and way quicker than the whole text file/copy/paste deal.

P.S. If you are struggling with Git, I recommend checking out Git Immersion. It's quick and easy, and I guarantee you that you'll start to see the benefits of using git.

Comments

Please enable JavaScript to view the comments powered by Disqus.