我在master分支上工作时,我注意到更改太大,因此我决定将它们放在另一个分支上。因此,我在Git Bash上进行了git checkout -b new_branch_name
,然后(没有在两个分支中的任何一个上提交)我放弃了master分支上的所有更改(来自Github Desktop)。令我惊讶的是,这也放弃了新分支的更改,我以为它们没有链接。
如何撤消丢弃?
编辑:
抱歉,我的术语不好,我是git新手。
答案 0 :(得分:1)
tl; dr:有疑问时:
git stash
。
我不确定您所说的 discard 是什么,因为这不在git术语之内。另外,我不确定您所说的更改。
所以我认为通过更改,您的意思是您已经完成但尚未提交的事情,即您的工作区或索引很脏。
您在分支A
上:
unstaged changes
↑
A
↑
…
并且您创建了一个新分支B
unstaged changes
↑
A,B
↑
…
然后您做了所谓的 discard ,但实际上是当前分支的reset --hard
。
A,B
↑
…
如果是这样,那么很抱歉告诉您您的更改丢失了。
永远消失了。
只要您还记得新鲜的话,就应该快点重写它们。
您需要了解的是,当您操作git时,正在处理以下级别的更改:
不在提交中(即1.或2.),则它可以消失。否则,有解决问题的解决方案。
但是您有时希望在不进行新提交的情况下保护脏索引。这就是stash
的作用。因此,每次您要使用分支机构时,都可以git stash
进行保存,并保存工作,工作区和索引。完成后,您可以git stash pop
,然后再次找到您的更改。
根据您所说的,对最后一部分有一个误解:本地更改和对索引的更改不是相对于分支的,而是相对于您的文件系统的。如果您更改分支,它们会留在那里并被应用到新分支(如果可能,否则会出现错误)。