&引用;git重置——硬头“;在主分支中删除了本地分支中的未老化更改

&引用;git重置——硬头“;在主分支中删除了本地分支中的未老化更改,git,github,version-control,Git,Github,Version Control,我在主分支中进行了一些本地更改,并将其合并到本地分支中 local>git merge master 在这之后,我想要一个干净的主存储库,所以我去了主存储库并对git进行了重置 local>git checkout master master> git reset --hard HEAD 然后我回到了当地分行,注意到我在当地的所有未过时的更改都丢失了。为什么会这样?当您通过git checkout master从local切换到master时,工作目录中的更改保持原样。除了

我在主分支中进行了一些本地更改,并将其合并到本地分支中

local>git merge master
在这之后,我想要一个干净的主存储库,所以我去了主存储库并对git进行了重置

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

然后我回到了当地分行,注意到我在当地的所有未过时的更改都丢失了。为什么会这样?

当您通过
git checkout master
local
切换到
master
时,工作目录中的更改保持原样。除了现在你在
master
分支上。当你这么做的时候:

git reset --hard HEAD
master
分支,您可以从
master
分支将工作目录和stage重置为
HEAD
commit。因此,我希望您的工作目录更改丢失

不过,有一种可能恢复您的工作目录。如果您使用的是像IntelliJ这样的优秀IDE,那么它可能会在Git重置文件之前记住您修改的文件的状态。要测试这一点,只需查看有问题的文件并尝试执行撤消操作。如果幸运的话,你可以通过这种方式找回旧的零钱

作为将来的参考,如果您在
local
上有工作更改,并且希望以这种方式切换分支,那么您可以尝试执行以下操作之一

  • 使用
    git stash
    隐藏您的作品
  • 本地
    上进行临时提交
如果隐藏,您可以稍后通过
git stash apply
再次应用这些更改。在临时提交的情况下,当您稍后返回到
local
时,您可以完成您的工作,然后通过以下方式修改临时提交:

git commit --amend

请注意,git stash本身在hood下做出2次(有时是三次)提交,以持久化给定分支上的工作目录和阶段。

git中有三个阶段

  • 未老化的更改(脏代码、工作代码)
  • 阶段性更改(干净、可提交的代码)
  • 提交的、推送的更改(经过充分测试的、可部署的代码)
  • 重置时,所有脏工作代码(在阶段1中)都将被删除,因为没有分支拥有该代码的所有权

    如果要“保存”本地脏工作副本,请尝试
    git stash


    显示更改阶段的一种更直观的辅助方式是通过
    git-gui

    不同的分支没有单独的“未分级更改”。只有一组未分级的更改,只有一组分级的更改。如果使用未分级的更改切换分支,则未分级的更改将保持未分级