撤消git checkout-

时间:2019-04-26 05:56:55

标签: git git-checkout file-recovery

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

git checkout -b MyBranch

对该分支进行了一些更改。添加了所有文件。然后我转到功能分支。我所有已分阶段进行的更改都存在于功能分支中。然后我做了:

git checkout -- <Staged File>

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

有什么办法可以恢复暂存的文件?

1 个答案:

答案 0 :(得分:1)

很遗憾,如果我正确理解了您的情况,那么您对文件所做的未提交的更改将会丢失。

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

您说您不再看到该文件。除非文件在分支的最新提交中不存在,否则这很奇怪(您应阅读this answer)。但是,如果您肯定它存在于远程分支中,则有一种方法可以将其恢复:

git checkout HEAD -- [file]

这将重置文件的版本及其在索引中的状态。

将来防止这种情况

因此,您对文件进行了一些更改,但是想要在进行提交之前将它们应用于其他分支或提交。为此,您可以使用[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来应用和删除存储,但是我发现在出现问题时能够重置和重做切换而不丢失所做的更改非常有用。