我有两个分支,test
和master
。
在test
中,我已经删除了文件。c,但在master中我没有。我当时正在测试分支上工作,我想切换回master来做一个快速的更改。
git checkout master
git pull origin master
这将我当前的分支设置为master,但没有像我期望的那样还原file.c。
git reset --hard HEAD
按我希望的那样重置存储库,但似乎不是正确的解决方案。
如果我切换分支,我如何让我的本地副本匹配我切换到的分支?我本来希望git pull
那样做,但也许我误解了。
最可能的解释是当你在test
分支上时,在删除file.c
之后,你没有提交那个更改。一旦你提交了变更,该提交将在分支test
上,然后当你切换到另一个仍然有该文件的分支时,如master
,该文件将返回。
请注意,误解可以从你对这个问题的措辞中看出(顺便说一下,这是一个非常常见的误解):
在
test
中,我已经删除了file.c,但在master
中,我没有。
你实际做的,是从你的工作文件夹中删除file.c
,而你有分支test
签出。但是您还没有向任何分支提交该删除。
变化本质上是跟随你从一个分支到另一个分支,只是等待你对它做些什么。但它不会到处跟着你。如果你试图切换到一个file.c
已经被修改过的分支,这将是一个冲突,所以Git会停止并告诉你在你继续之前对你的更改做一些事情(比如保存,提交,或者撤销)。
注:您使用的重置命令:
git reset --hard HEAD
基本上撤销所有挂起的更改。如果您正在进行其他更改,那么它们也会被撤消,并且可能永远丢失。如果您只想撤销对特定文件的挂起更改,您可以使用:
git checkout file.c
# or the newer:
git restore file.c