我正在做主人,完成了我需要做的事情,然后做了
git commit -am "message".
我想测试写一个新功能,所以我做了:
git branch NewFeature
接着是
git checkout NewFeature
然后我对版本控制文件进行了更改,回到git并执行了
git checkout master
我忘记做的是将这些更改提交给NewFeature分支。我的错,是的,但环顾四周似乎应该没有-f标志就失败了。不幸的是,它只是将我的更改与master合并。当然,我吓坏了,做了
git reset --hard head
当我换回时,似乎我丢失了在NewFeature分支上完成的所有工作!我做错了什么?
答案 0 :(得分:6)
这是正常行为。
如果分支之间没有相互冲突的更改,git会在您结帐时“移动”更改。 Git应该在结账后向您显示已移动文件的摘要。
执行git reset --hard HEAD
会恢复您的更改。
如果您有未提交的更改,但想要处理其他分支中的其他内容,则可以将更改存储以供日后使用。 See stash docs
git stash
git checkout <branch>
git checkout <oldBranch>
git stash pop
取消隐藏 答案 1 :(得分:0)
您可能需要考虑查看“git reflog”以找出分支的状态,以便恢复您的更改。
但正如您所指出的,git reset --hard
是一个更改工作树的操作,如手册页中所述:
--hard
Resets the index and working tree. Any changes to tracked files
in the working tree since <commit> are discarded.
我在本周的每周Git提示系列中写了更多关于reflog的信息:
http://alblue.bandlem.com/2011/05/git-tip-of-week-reflogs.html