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

Wil*_*ill 106 git branch rollback

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

我将如何丢弃这些更改并获得现在远程服务器上的分支?

ism*_*ail 181

注意:你不能放弃这个.

尝试git checkout -f这将丢弃所有所有分支和主服务器中提交的本地更改.


gor*_*gor 74

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

  • `git reset --hard HEAD ^`应该是接受的答案.OP没有询问其他分支...... (23认同)
  • 或者`git reset --hard HEAD ^` (5认同)
  • 我尝试了git reset --hard HEAD ^,它仍然留下了一堆未跟踪的文件.现在谷歌如何在一个简单的命令中删除它们. (3认同)
  • 我尝试了这个,我认为它删除了自上次推送以来的所有内容,而不仅仅是我上一次提交. (2认同)

mip*_*adi 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
Run Code Online (Sandbox Code Playgroud)

  • 还有:git checkout设计; git reset - 硬起源/设计 (7认同)

Mik*_*ski 17

git diff master > branch.diff
git apply --reverse branch.diff
Run Code Online (Sandbox Code Playgroud)


Ces*_*vas 7

@Will,git immersion是一个非常好的和简单的git教程.它将向您展示如何撤消以下情况的更改:unstaged,staged和committed.实验室14-18

  • 我想说我现在已经完成了git沉浸......一年之后.OI!我应该早点这么做...... (2认同)

F1L*_*nux 6

放弃所有更改的 REVERSIBLE 方法:

我在进行合并后发现了这个问题,但忘记立即签出开发。你猜对了:我开始直接在master上修改一些文件。噢!由于我的情况并不独特(我们都做过,不是吗;->),我将提供一种可逆的方法,我曾经放弃所有更改,以使master看起来再次开发

git diff在查看修改了哪些文件并评估错误范围后,我执行了:

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

首先隐藏所有更改后,接下来将它们清除。对错误掌握的文件所做的所有更改都消失了,并且奇偶校验已恢复。

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

git fsck --no-reflog | awk '/dangling commit/ {print $3}'
Run Code Online (Sandbox Code Playgroud)

了解哈希值后,我成功恢复了未提交的更改:

git stash apply hash-of-cleared-stash
Run Code Online (Sandbox Code Playgroud)

我并不是真的想恢复这些更改,只是想验证我可以恢复它们,所以我再次清除了它们。

另一种选择是将存储应用到不同的分支,而不是擦除更改。因此,就清除因在错误分支上工作而做出的更改而言,stash为您提供了很大的灵活性,可以从错误中恢复过来。

无论如何,如果您想要一种可逆的方法来清除分支的更改,那么在这个用例中,上述方法是一种危险性较小的方法。


小智 5

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


小智 5

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

git stash 保存“some_name”

您的更改将被保存,您可以稍后检索,如果需要,您也可以将其删除。执行此操作后,您的分支将没有任何未提交的代码,您可以使用 git pull 从主分支中提取最新代码。