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

时间:2011-01-28 15:41:10

标签: git branch rollback

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

如何放弃这些更改并获取现在远程服务器上的分支?

11 个答案:

答案 0 :(得分:170)

注意:你不能放弃这个。

尝试git checkout -f这将放弃在所有分支和主控中 提交的任何本地更改。

答案 1 :(得分:68)

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

答案 2 :(得分:16)

如果您不希望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

答案 3 :(得分:15)

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

答案 4 :(得分:7)

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

答案 5 :(得分:3)

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

答案 6 :(得分:2)

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

git stash save“some_name”

您的更改将被保存,如果您愿意,您可以稍后检索它们,或者您可以删除它们。 执行此操作后,您的分支将不会有任何未提交的代码,您可以使用git pull从主分支中提取最新代码。

答案 7 :(得分:0)

git checkout -f

这足以回答您的问题。一旦完成,唯一的事情就是完成了。不能撤消。

答案 8 :(得分:0)

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

我在合并后忘了结帐 develop 之后发现了这个问题。您猜对了:我开始直接在 master 上修改一些文件。噢!由于我的情况几乎不是唯一的(我们已经做到了,不是吗;->),所以我将提供一种可逆的方式,我曾经丢弃所有更改以获取 master < / em>看起来又像 开发

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

git stash
git stash clear

首先保存所有更改,然后将其清除。对 master 错误的文件所做的所有更改均已消失,并且恢复了奇偶校验。

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

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

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

git stash apply hash-of-cleared-stash

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

另一个选择是apply the stash to a different branch,而不是擦除更改。因此,在清除因使用错误的分支所做的更改方面,stash为您提供了很大的灵活性,可以从boo-boo中恢复。

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

答案 9 :(得分:0)

对于其他人,如果您只想还原对单个文件的更改:

git restore <fileName>

答案 10 :(得分:0)

rm -rf <working dir> 后跟 git clone <repo>.git 怎么样

在阅读了所有这些建议后,这正是我最终要做的,而且效果很好!