撤消 git 签出 --

Undo git checkout --

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

git checkout -b MyBranch

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

git checkout -- <Staged File>

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

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

很遗憾,如果我对你的情况的理解正确的话,你对文件的未提交更改丢失了。

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

你说你看不到文件了。除非该文件不存在于您分支的最新提交中,否则这很奇怪(您应该阅读 this answer)。但如果您确定它存在于远程分支上,则有一种方法可以取回它:

git checkout HEAD -- [file]

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

防止将来发生这种情况

所以您对文件进行了一些更改,但想将它们应用到不同的分支或在提交之前提交。为此,您可以使用 [git stash][1]。正如文档所说:

Use git stash when you want to record the current state of the working directory and the index, but want to go back to a clean working directory.

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

  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 来应用和删除存储,但我发现如果出现问题,您可以重置和重做切换而不会丢失更改,这很有用。