1072

我正在尝试撤消自上次提交以来的所有更改。我试过了git reset --hardgit reset --hard HEAD看了这篇文章后。我的回应是 head 现在是 18c3773... 但是当我查看我的本地源时,所有文件仍然存在。我错过了什么?

4

15 回答 15

2094
  • 这将取消暂存您可能已暂存的所有文件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

典型的用法是在构建脚本中,当您必须确保您的树绝对干净时 - 没有任何修改或本地创建的目标文件或构建工件,并且您希望使其工作非常快并且不重新 -每次克隆整个存储库。

于 2012-12-28T21:04:38.177 回答
180

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

git stash
git stash drop

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

git clean -fdx

git 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

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

于 2014-07-18T20:59:59.990 回答
42

我所做的是

git add . (adding everything)
git stash 
git stash drop

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

M. Justin指出的较短版本

git stash -u && git stash drop

于 2019-06-09T02:12:22.643 回答
23

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

有关存储的更多信息

于 2012-12-28T21:17:00.437 回答
18

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

安全的方式

git stash -u

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

想要稍后恢复更改?

git stash pop

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

想要永久删除更改?

git stash drop

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

链接到 git stash 文档

于 2020-07-13T18:20:07.877 回答
12

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

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

在此处输入图像描述 2)选择所有unstage文件(命令+a),右键选择remove

在此处输入图像描述

就这么简单:D

于 2016-07-14T17:19:58.760 回答
8

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

您可以在 UI 中使用“从本地历史还原”来执行相同的操作,参考:从本地历史还原

于 2015-08-28T09:31:36.843 回答
7

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

git restore <file>

放弃工作目录中的更改。

于 2020-09-06T13:39:38.030 回答
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

状态转换动作

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

git reset && git checkout . && git clean -fdx
于 2016-07-01T08:54:37.043 回答
5

使用它在最后一次提交后删除不需要的更改。

git reset --hard HEAD
于 2021-03-25T06:00:36.090 回答
5

git restore [filename_path]

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

git restore /usr/myPC/folder/index.html
于 2021-01-31T17:22:16.500 回答
3

下面定义了一个可重用的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

于 2021-03-11T22:18:39.903 回答
2

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

于 2021-10-14T18:10:25.353 回答
2

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

git add . 
git stash 
git stash drop
git clean -fdx
于 2021-05-28T12:24:21.627 回答
1
# Navigate to project root, `.` works too.
git restore *

git status表明我有一些文件已更改,但我想摆脱这些文件并开始一个新的分支。直到今天,我一直在使用 git reset 方法,我喜欢用它来跳回其他特定的提交。

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

于 2021-05-14T15:56:19.007 回答