[英]git undo all uncommitted or unsaved changes
我正在尝试撤消自上次提交以来的所有更改。 在查看此帖子后,我尝试git reset --hard
和git reset --hard HEAD
。 我的回应是 head 现在是 18c3773... 但是当我查看我的本地源时,所有文件仍然存在。 我错过了什么?
这将取消暂存您可能使用git add
暂存的所有文件:
git reset
这将恢复所有本地未提交的更改(应在 repo root 中执行):
git checkout .
您还可以仅将未提交的更改还原到特定文件或目录:
git checkout [some_dir|file.txt]
恢复所有未提交更改的另一种方法(更长的类型,但适用于任何子目录):
git reset --hard HEAD
这将删除所有本地未跟踪的文件,因此只保留 git 跟踪的文件:
git clean -fdx
警告:
-x
还将删除所有被忽略的文件,包括.gitignore
指定的文件! 您可能希望使用-n
预览要删除的文件。
总结一下:执行下面的命令基本上等同于从原始源获取新的git clone
(但它不会重新下载任何东西,所以要快得多):
git reset
git checkout .
git clean -fdx
典型的用法是在构建脚本中,当您必须确保您的树绝对干净时 - 没有任何修改或本地创建的目标文件或构建工件,并且您希望使其工作非常快并且不重新 -每次克隆整个存储库。
如果您希望“撤消”所有未提交的更改,只需运行:
git stash
git stash drop
如果您有任何未跟踪的文件(通过运行git status
进行检查),可以通过运行删除这些文件:
git clean -fdx
git stash
创建一个新的 stash 将成为stash@{0} 。 如果你想先检查,你可以运行git stash list
来查看你的存储列表。 它看起来像:
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
每个存储都以先前的提交消息命名。
我所做的是
git add . (adding everything)
git stash
git stash drop
一个班轮: git add . && git stash && git stash drop
git add . && git stash && git stash drop
M. Justin指出的较短版本
git stash -u && git stash drop
还有git stash
- 它“隐藏”您的本地更改,可以在以后重新应用或在不再需要时删除
添加此答案是因为先前的答案会永久删除您的更改
git stash -u
说明:存储本地更改,包括未跟踪的更改( -u
标志)。 该命令保存您的本地修改并恢复工作目录以匹配 HEAD 提交。
git stash pop
说明:该命令会将更改重新应用到当前工作树状态的顶部。
git stash drop
说明:该命令将永久删除隐藏的条目
撤消未提交提交的更改的另一个选项是运行:
git restore <file>
放弃工作目录中的更改。
对于那些到达这里搜索是否可以撤消git clean -f -d
的人,通过它删除了在eclipse中创建的文件,
您可以在 UI 中使用“从本地历史还原”来执行相同的操作,参考: 从本地历史还原
如果您想“撤消”所有未提交的更改或本地更改,只需运行:
git add .
git stash
git stash drop
git clean -fdx
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
0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"
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
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
git reset && git checkout . && git clean -fdx
git restore [filename_path]
例如,我需要丢弃index.html
文件中的最后更改:
git restore /usr/myPC/folder/index.html
使用它在最后一次提交后删除不需要的更改。
git reset --hard HEAD
下面定义了一个可重用的Git 命令别名来删除任何本地更改,然后可以在将来的任何时间使用它来删除任何未提交的更改:
git config --global alias.remove-changes '!git stash push --include-untracked && git stash drop'
使用别名很简单:
git remove-changes
别名使用git stash push --include-untracked
将所有更改推送到存储(包括未提交的更改),然后使用git stash drop
新创建的存储条目。
# Navigate to project root, `.` works too.
git restore *
git status
显示我有一些文件已更改,但我想摆脱这些文件并开始一个新分支。 直到今天,我一直在使用 git reset 方法,我喜欢用它来跳回其他特定的提交。
Git 中有三个选项可以帮助您撤消本地更改¶ 要查看在您的工作目录中所做的更改,您应该运行 git status:
状态
使用 git stash 撤消更改要丢弃所有本地更改,但也可以保存它们以供以后使用,您可以运行 git stash 命令:
混帐藏匿
使用 git checkout 撤消更改要永久放弃对文件的本地更改,您可以运行:
git结帐——
使用 git reset 撤消更改要永久放弃对所有文件的所有本地更改,您可以执行以下操作:
git reset --hard
来源: https ://www.w3docs.com/snippets/git/how-to-discard-unstaged-changes.html
只需使用以下命令
git remove-changes && git clean -fdx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.