如何丢弃对分支所做的所有更改?


116

我正在分支机构(即design)工作,并且进行了许多更改,但是我需要全部丢弃并重新设置它们以匹配存储库版本。我以为git checkout design会这样做,但这只是告诉我我已经在分支中design,并且我有3个修改过的文件。

我如何丢弃这些更改并获得分支,因为它现在位于远程服务器上?

Answers:


207

注意:您无法撤消此操作。

尝试执行git checkout -f此操作将丢弃所有不在ALL分支和master中提交的本地更改。


86

git reset --hard如果您想丢弃自上次提交以来的所有内容,可以为您提供帮助


6
git reset --hard HEAD^
死鱼2013年

27
git reset --hard HEAD^应该真的是公认的答案。OP并未询问其他分支机构…
vphilipnyc

2
我尝试了一下,我认为它删除了自上次推送以来的所有内容,而不仅仅是我的上一次提交。
Chase Roberts

3
我尝试了git reset --hard HEAD ^,但它仍然留下了一堆未跟踪的文件。现在,谷歌如何在一个简单的命令中将其删除。
约翰·迪恩

20
git diff master > branch.diff
git apply --reverse branch.diff

如果您的目标是将特定分支的状态设置为与master分支相等,那么这些步骤将非常有用。为此,请在特定分支内运行此文件,然后在使用git rm [branch name].diff
karolus

18

如果您不想进行任何更改,design并且绝对希望它只与远程分支匹配,则也可以删除该分支并重新创建它:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
还:git checkout设计;git reset --hard origin / design

在删除分支之前,我也会提交
Asarluhi,2015年

如果您认为本地分支中的提交不在远程上,那么我认为这是使情况真正混乱的秘诀。我绝对不会使用此解决方案。
erewok '16

1
@erewok:好吧,这个问题确实是说询问者想要放弃所有更改。
mipadi

而且我认为这个答案无法实现。
erewok '16

7

@ Will,git浸入是一个非常好的和简单的git教程。它会向您展示在以下情况下如何撤消更改:未暂存,已暂存和已落实。实验14-18


2
我只想说一年后我现在已经完成git浸泡。OI!我应该早点这样做……
2012年

1
这需要Ruby安装..似乎并不总是一个选择
Vishnu

5

当您要放弃本地分支中的更改时,可以使用git stash命令存储这些更改。

git stash保存“ some_name”

您所做的更改将被保存,您以后可以检索它们,也可以将其删除。完成此操作后,您的分支将没有任何未提交的代码,您可以使用git pull从主分支中提取最新代码。


4

在源根目录中: git reset ./ HEAD <--un-stage any staged changes git checkout ./ <--discard any unstaged changes


0

放弃所有更改的可逆方法:

我发现做一个合并,忘记结账后后这个问题制定随即。您猜对了:我开始直接在master上修改一些文件。噢!由于我的情况几乎不是唯一的(我们已经做到了,不是吗;->),所以我将提供一种可逆的方式,我过去常常放弃所有更改以使母版看起来像重新开发一样。

git diff查看要修改的文件并评估错误范围之后,我执行了:

git stash
git stash clear

在首先存储所有更改之后,接下来将它们清除。对文件错误的文件所做的所有更改均已消失,并且恢复了奇偶校验。

假设我现在想恢复这些更改。我可以做这个。第一步是找到我刚刚清除/删除的存储的哈希值:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

学习完哈希后,我成功使用以下方法恢复了未提交的更改:

git stash apply hash-of-cleared-stash

我并不是真的想要恢复这些更改,只是想确认是否可以找回它们,所以我再次清除了它们。

另一种选择是将隐藏应用到其他分支,而不是擦除更改。因此,在清除因使用错误的分支而做出的更改方面,stash可以为从boo-boo中恢复提供很大的灵活性。

顺便说一句,如果您想要一种可逆的方式来清除分支的更改,则在此用例中,前述操作不太危险。


-1

git checkout -f

这足以满足您的问题。一旦完成,只有一件事了。没有撤消。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.