问题
I\'m trying to undo all changes since my last commit. I tried git reset --hard and git reset --hard HEAD after viewing this post. I responds with head is now at 18c3773... but when I look at my local source all the files are still there. What am I missing?
回答1:
This will unstage all files you might have staged with
git add:git resetThis will revert all local uncommitted changes (should be executed in repo root):
git checkout .You can also revert uncommitted changes only to particular file or directory:
git checkout [some_dir|file.txt]Yet another way to revert all uncommitted changes (longer to type, but works from any subdirectory):
git reset --hard HEADThis will remove all local untracked files, so only git tracked files remain:
git clean -fdxWARNING:
-xwill also remove all ignored files, including ones specified by.gitignore! You may want to use-nfor preview of files to be deleted.
To sum it up: executing commands below is basically equivalent to fresh git clone from original source (but it does not re-download anything, so is much faster):
git reset
git checkout .
git clean -fdx
Typical usage for this would be in build scripts, when you must make sure that your tree is absolutely clean - does not have any modifications or locally created object files or build artefacts, and you want to make it work very fast and to not re-clone whole repository every single time.
回答2:
If you wish to "undo" all uncommitted changes simply run:
git stash
git stash drop
If you have any untracked files (check by running git status), these may be removed by running:
git clean -fdx
git stash creates a new stash which will become stash@{0}. If you wish to check first you can run git stash list to see a list of your stashes. It will look something like:
stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes
Each stash is named after the previous commit messsage.
回答3:
there is also git stash - which "stashes" your local changes and can be reapplied at a later time or dropped if is no longer required
more info on stashing
回答4:
I'm using source tree.... You can do revert all uncommitted changes with 2 easy steps:
1) just need to reset the workspace file status
2) select all unstage files (command +a), right click and select remove
It's that simple :D
回答5:
For those who reached here searching if they could undo git clean -f -d , by which a file created in eclipse was deleted,
You can do the same from the UI using "restore from local history" for ref:Restore from local history
回答6:
What I do is
git add . (adding everything)
git stash
git stash drop
One liner: git add . && git stash && git stash drop
回答7:
States transitioning from one commit to new commit
0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed
Action for state transitioning
0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"
Check diff
0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD
Revert to last commit
2->1: git reset
1->0: git checkout . #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD
Equivalent of git clone, without re-downloading anything
git reset; git checkout .; git clean -fdx
来源:https://stackoverflow.com/questions/14075581/git-undo-all-uncommitted-or-unsaved-changes