我在分支机构(即design
)工作,我做了很多更改,但是我需要将它们全部丢弃并重置它以匹配存储库版本。我认为git checkout design
会这样做,但它只是告诉我我已经在分支design
并且我有3个修改过的文件。
如何放弃这些更改并获取现在远程服务器上的分支?
答案 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
怎么样
在阅读了所有这些建议后,这正是我最终要做的,而且效果很好!