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

我正在尝试撤消自上次提交以来的所有更改。查看这篇文章后,我尝试了git reset --hardgit reset --hard HEAD。我的响应是head is now at 18c3773…但是当我查看我的本地源代码时,所有文件都还在那里。我缺少什么?

1082950 次浏览
  • 这将取消您可能使用git add暂存的所有文件:

    git reset
  • This will revert all local uncommitted changes (should be executed in repo root):

    git checkout .

    您还可以仅将未提交的更改恢复到特定文件或目录:

    git checkout [some_dir|file.txt]

    还有另一种方法可以恢复所有未提交的更改(键入时间更长,但可以从任何子目录工作):

    git reset --hard HEAD
  • This will remove all local untracked files, so only git tracked files remain:

    git clean -fdx

    警告:-x还将删除所有被忽略的文件,包括.gitignore指定的文件!您可能希望使用-n预览要删除的文件。


总结一下:执行下面的命令基本上相当于从原始源代码中重新下载git clone(但它不会重新下载任何东西,所以速度要快得多):

git resetgit checkout .git clean -fdx

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

还有git stash-它“隐藏”您的本地更改,并且可以在以后重新应用或在不再需要时删除

更多藏匿信息

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

git stashgit stash drop

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

git clean -fdx

git stash创建了一个新的存储,它将成为stash@{0}。如果您想先检查,您可以运行git stash list以查看您的存储列表。它看起来像:

stash@{0}: WIP on rails-4: 66c8407 remove forem residualsstash@{1}: WIP on master: 2b8f269 Map qualificationsstash@{2}: WIP on master: 27a7e54 Use non-dynamic findersstash@{3}: WIP on blogit: c9bd270 some changes

每个存储都以之前的提交消息命名。

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

您可以使用“从本地历史记录恢复”从UI执行相同的操作,用于参考:从当地历史中恢复

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

0. last commit,i.e. HEAD commit1. Working tree changes, file/directory deletion,adding,modification.2. The changes are staged in index3. Staged changes are committed

状态转换动作

0->1: manual file/directory operation1->2: git add .2->3: git commit -m "xxx"

校验差异

0->1: git diff0->2: git diff --cached0->1, and 0->2: git diff HEADlast last commit->last commit: git diff HEAD^ HEAD

恢复到上次提交

2->1: git reset1->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 clone,无需重新下载任何东西

git reset && git checkout . && git clean -fdx

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

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

在此处输入图像描述2)选择所有取消阶段文件(命令+a),右键单击并选择删除

在此处输入图片描述

就这么简单: D

我所做的是

git add . (adding everything)git stashgit stash drop

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

Justin先生所指出的较短版本

git stash -u && git stash drop

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

安全的方式

git stash -u

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

想稍后恢复更改吗?

git stash pop

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

想要永久删除更改?

git stash drop

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

链接到git stash留档

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

git restore <file>

放弃工作目录中的更改。

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

git restore /usr/myPC/folder/index.html

下面定义了一个可重用的git命令别名来删除任何本地更改,然后可以在将来的任何时间使用它来删除任何未提交的更改:

git config --global alias.remove-changes '!git stash push --include-untracked && git stash drop'

使用别名很简单:

git remove-changes

别名使用git stash push --include-untracked将所有更改推送到stash(包括未提交的更改),然后使用git stash drop删除新创建的stash条目。

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

git reset --hard HEAD
# Navigate to project root, `.` works too.git restore *

git status显示我有一些文件被更改了,但我想摆脱这些文件并启动一个新的分支。直到今天,我一直在使用git重置方法,我确实喜欢这种方法跳回其他特定的提交。

https://www.git-tower.com/learn/git/commands/git-restore/

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

git add .git stashgit stash dropgit clean -fdx

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

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

git status

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

git stash

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

git checkout -- <file>

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

git reset --hard

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

我只是偶然发现了一个github存储库,它很容易在git中撤消一些东西。它被称为ugit

只需键入ugit,它就会为您提供一个选项列表,您可以选择撤消该git命令

输入图片描述

只需使用以下命令

git remove-changes && git clean -fdx