![]() The apply command is happy to apply a stash to a modified working tree (or at least, to try to apply it). This is true even if you already have some changes. (This simplified version looks only at the "final work tree" changes, not the saved index changes that -index restores separately.) The command git stash apply, without -index, just tries to make those same changes in your working tree now. The stash will still be there ( apply keeps it around), so you can look at it more, or decide this was the wrong place to apply it and try again differently, or whatever.Īny time you have a stash, you can use git stash show -p to see a simplified version of what's in the stash. The apply operation looks at what the commit changed and tries to repeat it wherever you are now. The main thing to remember is that the "stash" is a commit, it's just a slightly "funny/weird" commit that's not "on a branch". Git stash apply # apply stashed changes see below about -index ![]() Git checkout -b temp # optional: create a new branch for "apply" Or maybe it goes more like this: git status # see if there's anything you need to commit Git checkout -b temp # create new temp branch to save stuff # uh oh, there is - let's put it on a new temp branch That way the "somewhere" that you are applying them, has nothing else in it, and you'll just be trying the stashed changes: git status # see if there's anything you need to commit This one is beyond the scope of this answer see this other StackOverflow answer instead.įor complicated cases, I recommend starting in a "clean" working tree first, by committing any changes you have now (on a new branch if you like). You're using git stash save -keep-index in order to test "what will be committed". So now you use git stash apply -index, and that sometimes fails with: Conflicts in index. You had one version in the stashed index/staging area and another (different) version in the working tree. (Extra-advanced) You've used git stash save -p, or carefully git add-ed and/or git rm-ed specific bits of your code before running git stash save. I personally prefer to transfer these changes to a new branch, because branches have names, and cleanup-attempt-in-December means a lot more to me than (The git stash command takes an optional save-message, and those can help, but somehow, all my stashes just wind up named WIP on branch.) Again, the one without a number is also you pile up a lot of stashes, it can get fairly messy (was the stash I wanted or was it Wait, I just pushed another, now they're 8 and 5?). Dropping a specific stash renumbers only the higher-numbered ones. You can apply and then drop a specific stash, too: git stash apply and so on. If you had, even more, the one that was becomes and so on. When you git stash drop, it drops the newest, and the one that was moves to the top of the stack. The newest is always the lowest-numbered. If you do that, you have two stashes, one just called stash-but you can also write one spelled Use git stash list (at any time) to see them all. You can in fact git stash save again, as git stash makes a "stack" of changes. Now you want to keep, or even move, these changes, and apply your stash too. Then you switched to another branch and started more changes, forgetting that you had the stashed ones. You started some changes and stashed them.Inspect the results carefully (with git diff) to see if you like them, and if you do, use git stash drop to drop the stash. This gets Git to merge in your earlier changes, using Git's rather powerful merge mechanism. Check out the other branch and use git stash apply. Run git stash save (or plain git stash, same thing). You just want to take the changes you have now and "move" them to another branch. You started with a clean branch, were working on some changes, and then realized you were doing them in the wrong branch.The above is for "way 1", the "easy way": There are at least three or four different "ways to use git stash", as it were. What if you're doing more-advanced or more-complicated stuff? It's all pretty minor one way or the other though, and for a newbie to Git, it should be about the same. If you apply, you get to choose when to drop. If pop is able to extract the stash, it will immediately also drop it, and if you subsequently realize that you wanted to extract it somewhere else (in a different branch), or with -index, or some such, that's not so easy. The difference is that apply leaves the stash around for easy re-try of the apply, or for looking at, etc. I always suggest using git stash apply rather than git stash pop. Then use git diff to see the result.Īfter you're all done with your changes-the apply looks good and you're sure you don't need the stash any more- then use git stash drop to get rid of it. Just check out the branch you want your changes on, and then git stash apply. The easy answer to the easy question is git stash apply
0 Comments
Leave a Reply. |