如何撤消git上的放弃更改?

时间:2019-05-25 21:33:11

标签: git github

我在master分支上工作时,我注意到更改太大,因此我决定将它们放在另一个分支上。因此,我在Git Bash上进行了git checkout -b new_branch_name,然后(没有在两个分支中的任何一个上提交)我放弃了master分支上的所有更改(来自Github Desktop)。令我惊讶的是,这也放弃了新分支的更改,我以为它们没有链接。

如何撤消丢弃?

编辑:

  • 变化:我尚未承诺的事情。
  • 放弃:Github Desktop允许我放弃(删除)未提交的更改。

抱歉,我的术语不好,我是git新手。

1 个答案:

答案 0 :(得分:1)

  

tl; dr:有疑问时:git stash

我不确定您所说的 discard 是什么,因为这不在git术语之内。另外,我不确定您所说的更改

所以我认为通过更改,您的意思是您已经完成但尚未提交的事情,即您的工作区或索引很脏

您在分支A上:

unstaged changes
      ↑
      A
      ↑
      …

并且您创建了一个新分支B

unstaged changes
       ↑
     A,B
       ↑
       …

然后您做了所谓的 discard ,但实际上是当前分支的reset --hard

     A,B
       ↑
       …

如果是这样,那么很抱歉告诉您您的更改丢失了。

永远消失了。

只要您还记得新鲜的话,就应该快点重写它们。

您需要了解的是,当您操作git时,正在处理以下级别的更改:

  1. 您的工作空间:您所做的任何更改都会显示为 unstaged
  2. 您的索引:您为下一次提交添加的任何更改
  3. 您当前的分支机构:您所做的一切
  4. 远程分支:无论您按了什么
根据经验,如果

不在提交中(即1.或2.),则它可以消失。否则,有解决问题的解决方案。

但是您有时希望在不进行新提交的情况下保护脏索引。这就是stash的作用。因此,每次您要使用分支机构时,都可以git stash进行保存,并保存工作,工作区和索引。完成后,您可以git stash pop,然后再次找到您的更改。

根据您所说的,对最后一部分有一个误解:本地更改和对索引的更改不是相对于分支的,而是相对于您的文件系统的。如果您更改分支,它们会留在那里并被应用到新分支(如果可能,否则会出现错误)。