我在master分支中有一些本地更改,我合并到本地分支。
local>git merge master
在此之后,我想要一个干净的主存储库,所以我去了主人并做了git重置头。
local>git checkout master
master> git reset --hard HEAD
然后我回到当地分公司,注意到我在本地的所有未分期更改都已丢失。为什么会这样?
答案 0 :(得分:2)
当您通过local
从master
切换到git checkout master
时,工作目录中的更改将保持原样。除了现在你在master
分支。当你这样做时:
git reset --hard HEAD
来自master
分支,您将工作目录和阶段重置为HEAD
分支的master
提交。因此,我希望您的工作目录更改丢失。
有一种方法可以恢复您的工作目录。如果您正在使用像IntelliJ这样的好IDE,那么它可能会记住您在Git重置它们之前修改的文件的状态。要测试这个,只需查看有问题的文件并尝试撤消。如果你很幸运,你可能会以这种方式得到旧的改变。
为了将来参考,如果您在local
上进行了工作更改并且想要以这种方式切换分支,那么您可以尝试执行以下操作之一
git stash
隐藏您的作品local
上进行临时提交。如果您藏匿,您可以稍后通过git stash apply
再次应用这些更改。在临时提交的情况下,当您稍后返回local
时,您可以完成您的工作,然后通过以下方式修改该临时提交:
git commit --amend
请注意,引擎git stash
本身会使2个(有时是3个)提交持久保存给定分支上的工作目录和阶段。
答案 1 :(得分:1)
Git有三个阶段,
当你重置时,所有脏的工作代码(在第1阶段)都将被删除,因为没有分支获得所有权。
如果你想"保存"本地脏工作副本,请尝试git stash
。
显示更改阶段的更直观的辅助方式是git gui
。