撤消git checkout -

问题描述 投票:0回答:1

我首先从功能分支中检出一个分支。

git checkout -b MyBranch

在那个分支做了一些改变。添加了所有文件。然后我转移到功能分支。所有我的分阶段更改都出现在功能分支中。然后我做了:

git checkout -- <Staged File>

然后我搬到了我的分店。我在MyBranch中看不到我的暂存文件。

有什么方法可以恢复我的暂存文件吗?

git git-checkout file-recovery
1个回答
1
投票

不幸的是,如果我正确了解您的情况,您对文件的未提交更改将会丢失。

命令git checkout -- [file]恢复对文件所做的任何未提交的更改。它将其版本更改为当前分支上的最后一次提交。

你说你再也看不到文件了。除非你的分支的最新提交中不存在该文件,这很奇怪(你应该阅读this answer)。但如果你肯定它存在于远程分支上,那么就有办法将其恢复:

git checkout HEAD -- [file]

这会重置文件的版本以及索引中的状态。

Preventing this in the future

因此,您对文件进行了一些更改,但希望在提交之前将它们应用于其他分支或提交。为此你可以使用[git stash][1]。正如文档所说:

如果要记录工作目录和索引的当前状态,但想要返回到干净的工作目录,请使用git stash。

在你的情况下,这意味着:

  1. 对文件进行更改
  2. 添加文件:git add [your-files-or-parameter]
  3. 存放文件:git stash
  4. 切换到功能分支:git checkout [feature-branch]
  5. 应用你藏匿的变化:git stash apply

现在,您的更改将应用​​于功能分支状态之上。

请注意,git stash apply将隐藏记录留在隐藏索引中,这意味着在您应用它之后,它仍然存在于那里。您可以使用git stash pop来应用和删除存储,但我发现,如果出现问题,您可以重置并重做切换而不会丢失更改。

© www.soinside.com 2019 - 2024. All rights reserved.