主分支中的“git reset --hard HEAD”删除了本地分支中的非分段更改

时间:2017-06-07 02:49:23

标签: git github version-control

我在master分支中有一些本地更改,我合并到本地分支。

local>git merge master

在此之后,我想要一个干净的主存储库,所以我去了主人并做了git重置头。

local>git checkout master
master> git reset --hard HEAD

然后我回到当地分公司,注意到我在本地的所有未分期更改都已丢失。为什么会这样?

2 个答案:

答案 0 :(得分:2)

当您通过localmaster切换到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. 未分期更改(脏,工作代码)
  2. 分阶段更改(干净,可提交的代码)
  3. 承诺,推送更改(经过全面测试,可部署的代码)
  4. 当你重置时,所有脏的工作代码(在第1阶段)都将被删除,因为没有分支获得所有权。

    如果你想"保存"本地脏工作副本,请尝试git stash

    显示更改阶段的更直观的辅助方式是git gui