如何撤消 git 上的丢弃更改?
Posted
技术标签:
【中文标题】如何撤消 git 上的丢弃更改?【英文标题】:How to undone a discard changes on git? 【发布时间】:2019-10-12 00:22:22 【问题描述】:当我注意到更改太大时,我正在主分支上工作,我决定应该在另一个分支上进行。所以我在 Git Bash 上做了git checkout -b new_branch_name
然后(没有在任何两个分支上提交)我丢弃了主分支上的所有更改(来自 Github Desktop)。令我惊讶的是,这也丢弃了新分支的更改,我以为它们没有链接。
如何撤消丢弃操作?
编辑:
更改:我尚未提交的内容。 丢弃:Github Desktop 允许我丢弃(删除)未提交的更改。对不起,我的术语很糟糕,我是 git 新手。
【问题讨论】:
如果它们没有提交,则更改不属于任何分支。它们只是对文件的本地编辑。 【参考方案1】:tl;dr:如有疑问:
git stash
.
我不确定你叫什么discard,因为这不在 git 术语中。另外,我不确定您所说的更改是什么意思。
所以我假设你所说的改变是指你已经完成但没有承诺的事情,即你有你的工作区或 索引脏。
你在分支A
:
unstaged changes
↑
A
↑
…
并且您创建了一个新分支B
unstaged changes
↑
A,B
↑
…
然后你做了你所谓的丢弃,但实际上是当前分支的reset --hard
。
A,B
↑
…
如果是这样,那么我很遗憾地告诉您,您的更改已丢失。
永远消失了。
只要你还记忆犹新,你就应该赶紧重写它们。
您需要了解的是,当您操作 git 时,您正在处理以下级别的更改:
-
您的工作区:您所做的任何更改都显示为 unstaged
您的索引:您为下一次提交添加的任何更改
你当前的分支:无论你提交了什么
远程分支:无论你推送什么
根据经验,如果它不在提交中(即 1. 或 2.),那么它可能会消失。否则,有解决办法。
但有时您希望在不进行新提交的情况下保护您的脏索引。这就是stash
的用途。所以每次你想玩分支时,你可以git stash
并且你的工作被保存,你的工作区和索引是干净的。完成后,您可以git stash pop
并再次找到您所做的更改。
根据您的说法,对最后一部分存在误解:本地更改和索引更改与分支无关,而是与您的文件系统相关。如果您更改分支,它们会保留在那里并应用于新分支(如果可能,否则您会收到错误消息)。
【讨论】:
长话短说:当您在原始分支上工作时,您在工作树上所做的更改,当您签出另一个分支时,git 在签出时携带它们......但他们仍会像切换分支之前一样未提交。如果你然后清理,那么......他们走了。以上是关于如何撤消 git 上的丢弃更改?的主要内容,如果未能解决你的问题,请参考以下文章