Git stash drop vs git reset

git stash apply
git stash name
git stash message
git stash pop specific
git stash file
git stash no local changes to save
git stash stack overflow
git stash apply vs pop

When I'm working on a branch and I want to completely remove all unstaged changes, I tend to use git stash and then git stash drop. Assuming I don't have any staged changes, is there a functional difference between that and git reset HEAD?

To answer your question simply.

git stash Deletes all the tracked files, which can be restored using git stash pop for the recent stash only. If you believe you have done git stash multiple times you check using git stash list

For the question on git stash drop it was well explained here Difference between git stash pop and git stash apply

If you want to stash untracked files too you can use git stash --all

On the other hand git reset HEAD is a completely different operation. If you did not do git commit at least in your local machine and done a git reset all your staged files will be unstaged again. Means if you do a git add file.test and did a git reset HEAD it will unstage all the files. Pointing to the HEAD commit in you local machine. So think before working on this command.

It's not a dangerous command but you can see the difference using the git reflog, which helps in understanding where the HEAD is pointing in your local and origin.

Stashing and Cleaning, to discard changes in working directory) modified: lib/simplegit.rb index file" HEAD is now at 049d078 Create index file (To restore them type "git stash apply")​. If you believe you have done git stash multiple times you check using git stash list. For the question on git stash drop it was well explained here Difference between git stash pop and git stash apply. If you want to stash untracked files too you can use git stash --all. On the other hand git reset HEAD is a completely

man git-stash

Save your local modifications to a new stash, and run git reset --hard to revert them.

There is no difference as it does exactly the same.

git-stash Documentation, git-stash - Stash the changes in a dirty working directory away You need to resolve the conflicts by hand and call git stash drop manually afterwards. -a -m "Fix in a hurry" $ git switch my_wip $ git reset --soft HEAD^ # continue hacking . A safer option is to run git stash --all to remove everything but save it in a stash. Assuming you do want to remove cruft files or clean your working directory, you can do so with git clean . To remove all the untracked files in your working directory, you can run git clean -f -d,

Well... first of all, git reset HEAD won't actually remove your unstaged changes. git reset --hard HEAD would (though it still won't remove untracked files). The important point is, resets primary focus is on updating the index - i.e. you would use it to unstage changes.

The most direct procedure to clear unstaged changes would be

git checkout -- .
git clean -f

The first command discards unstaged changes from tracked files, and the second removes untracked files (though you may want to do a git clean -n first, to make sure you're not forgetting a file; because once you delete an untracked file, git can't do anything to help you recover it).

I would say that using stash is a hack - it doesn't reflect the intended semantics of the command - but it generally will work. You could even give the --keep-index command to avoid accidentally discarding staged changes.

The practical difference is small. You're making git do extra work to store objects in the database, and then telling it to disregard those objects. If done often, this could clutter the database, but the added objects will eventually get cleared away by gc, so in practice I wouldn't expect it to cause a real problem.

git stash, Git stash temporarily shelves or stashes changes made to your working copy so Dropped refs/stash@{0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a). $ git stash apply stash@{0} You may notice the stash is still there after you have applied it. You can drop it if you don't need it any more. $ git stash drop stash@{0} Or, because the stash acts like a stack, you can pop off the last stash you saved: $ git stash pop If you want to wipe all your stashes away, run the 'clear' command: $ git

Resetting, Checking Out & Reverting, Compare the most common configurations of git reset, git checkout, and git git reset, Commit-level, Discard commits in a private branch or throw away Since this has the potential to overwrite local changes, Git forces you to commit or stash​  In retrospect, I should have been using git stash apply not git stash pop. I was doing a bisect and had a little patch that I wanted to apply at every bisect step. Now I'm doing this: $ git reset --hard; git bisect good; git stash apply $ # Run tests $ git reset --hard; git bisect bad; git stash apply etc.

How to Git Stash Your Work [the Correct Way], git stash Saved working directory and index state WIP on master: you left off, you can restore the saved state easily: git stash pop . If you no longer need a particular stash, you can delete it with: $ git stash drop <stash_id> . 1.- More than "save" your files, is act as Git expect to according their flow. (Advice, Git knows :) ) 2.- Stash will move your modified files into a stack. So, later in the same or in another branch, you will be able to bring them back and see those modifications in your project.

Doing a hard reset, Note that the stash is not branch specific, so you could potentially stash the state of your tree while on one branch, and later apply the differences to another. It  VonC and Charles explained the differences between git reset and git checkout really well. My current understanding is that git reset reverts all of the changes back to a specific commit, whereas git checkout more or less prepares for a branch. I found the following two diagrams quite useful in coming to this understanding:

Comments
  • Never thought of doing it that way.. interesting!
  • I assume here that you meant git reset --hard HEAD. Given the additional assumption—the assuming I don't have staged changes part—then these act the same, although git stash && git stash drop causes a lot more work to happen inside the computer.