git撤消所有未提交或未保存的更改

Ant*_*yrd 759 git command-line undo git-reset

我试图撤消自上次提交以来的所有更改.我试着git reset --hardgit reset --hard HEAD观察后,这个职位.我用头响应现在是18c3773 ...但是当我查看我的本地源时,所有文件仍然存在.我错过了什么?

mvp*_*mvp 1478


总结一下:执行以下命令基本上等同git clone于原始来源的新鲜(但它不会重新下载任何内容,因此更快):

git reset
git checkout .
git clean -fdx
Run Code Online (Sandbox Code Playgroud)

这种情况的典型用法是在构建脚本中,当你必须确保你的树是绝对干净的 - 没有任何修改或本地创建的目标文件或构建工件,并且你想让它工作得非常快而且不能重新每次都克隆整个存储库.

  • 运行 `git clean -fdx` 删除了我的 `node_modules` 和 `.env`,太棒了 (9认同)
  • @fires3as0n 你还期待什么?这是必然会发生的。答案中也有一个警告。 (5认同)
  • 对于所有在谷歌上搜索“git checkout”的人。不起作用,感谢您坚持认为它“应该在存储库根目录中执行”。 (5认同)
  • 关于 git clean 的评论具有误导性。是的,我应该阅读警告,是的,我仍然很生气我丢失了 .env 和其他一些东西。但最重要的是,我认为这完全没有抓住重点。我想删除在“git status”中显示为未暂存或未跟踪的文件。所以“git clean”的这个变体对于这个目的来说没有意义。 (3认同)
  • @EresDev,您不必执行`git clean`,它将撤消未提交的更改,但保留所有未跟踪或添加的文件。但是,由于某些未跟踪的文件可能会干扰,因此它可能会影响生成结果。例如,如果您的.idea目录损坏,该怎么办? (2认同)
  • 这是一个救星。谢谢 (2认同)

Abr*_*ram 141

如果您希望" 撤消 "所有未提交的更改,只需运行:

git stash
git stash drop
Run Code Online (Sandbox Code Playgroud)

如果您有任何未跟踪的文件(通过运行检查git status),可以通过运行以下方法删除这些文件:

git clean -fdx
Run Code Online (Sandbox Code Playgroud)

git 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
Run Code Online (Sandbox Code Playgroud)

每个存储都以先前的提交消息命名.

  • `git stash -u` 更适合这个目的。并且永远不要运行“git clean -fdx”,它会删除 gitignored 的文件。 (5认同)
  • 确实是一个很好的解决方案,但是您需要在git stash之前使用git add。进行更改,因为即使在git stash之后,它也显示了我尚未提交的更改。 (2认同)

kes*_*hav 20

还有git stash- 它"隐藏"您的本地更改,可以在以后重新应用,如果不再需要则可以删除

关于藏匿的更多信息


Rtm*_*tmY 20

撤消未暂存提交的更改的另一个选项是运行:

git restore <file>
Run Code Online (Sandbox Code Playgroud)

放弃工作目录中的更改。


use*_*384 12

我正在使用源代码树....你可以通过2个简单的步骤恢复所有未提交的更改:

1)只需要重置工作区文件状态

在此输入图像描述 2)选择所有非舞台文件(命令+ a),右键单击并选择删除

在此输入图像描述

就这么简单:D


bsh*_*eps 12

添加此答案是因为之前的答案会永久删除您的更改

安全的方式

git stash -u

说明:存储本地更改,包括未跟踪的更改(-u标志)。该命令保存您的本地修改并恢复工作目录以匹配 HEAD 提交。

想要稍后恢复更改吗?

git stash pop

说明:该命令会将更改重新应用到当前工作树状态的顶部。

想要永久删除更改?

git stash drop

说明:该命令将永久删除隐藏的条目

链接到 git stash 文档


小智 12

git restore [filename_path]

例如,我需要放弃index.html文件中的最后更改:

git restore /usr/myPC/folder/index.html
Run Code Online (Sandbox Code Playgroud)


San*_*mar 11

如果您想“撤消”所有未提交的更改或本地更改,只需运行:

git add . 
git stash 
git stash drop
git clean -fdx
Run Code Online (Sandbox Code Playgroud)

  • 这很危险!它将清除`.gitignore`中的所有文件 (2认同)

Xab*_*Ion 9

Git 中提供了三个选项可以帮助撤消本地更改。

要查看工作目录中所做的更改,您应该运行 git status:

git status
Run Code Online (Sandbox Code Playgroud)

使用 git stash 撤消更改
要放弃所有本地更改,同时保存它们以供以后使用,您可以运行 git stash 命令:

git stash
Run Code Online (Sandbox Code Playgroud)

使用 git checkout 撤消更改
要永久放弃对文件的本地更改,您可以运行:

git checkout -- <file>
Run Code Online (Sandbox Code Playgroud)

使用 git reset 撤消更改
要永久放弃对所有文件的所有本地更改,您可以执行以下操作:

git reset --hard
Run Code Online (Sandbox Code Playgroud)

来源:https ://www.w3docs.com/snippets/git/how-to-discard-unstaged-changes.html


Abd*_*n K 7

对于那些到达这里搜索是否可以撤消的人git clean -f -d,删除了在eclipse中创建的文件,

您可以使用"从本地历史记录还原"从UI执行相同操作,以获取参考:从本地历史记录还原

  • 我没有拒绝投票,但你的回答并不清楚你的意图; 如果你在答案中改写第一句话会有所帮助. (3认同)

小智 7

使用它可以删除上次提交后不需要的更改。

git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)


Zii*_*Zii 6

从一次提交过渡到新提交的状态

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
Run Code Online (Sandbox Code Playgroud)

状态转换操作

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"
Run Code Online (Sandbox Code Playgroud)

检查差异

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
Run Code Online (Sandbox Code Playgroud)

恢复到上次提交

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
Run Code Online (Sandbox Code Playgroud)

相当于 git clone,无需重新下载任何东西

git reset && git checkout . && git clean -fdx
Run Code Online (Sandbox Code Playgroud)


Ral*_*lph 6

我要做的是

git add . (adding everything)
git stash 
git stash drop
Run Code Online (Sandbox Code Playgroud)

一班轮: git add . && git stash && git stash drop

  • 如果使用“-u”或“--include-untracked”创建存储以包含未跟踪的更改,则可以删除单独的“add”步骤:“git stash -u &amp;&amp; git stash drop”。 (2认同)
  • 到目前为止我找到的最好的选择。 (2认同)