【问题标题】:How to undo local changes to a specific file [duplicate]如何撤消对特定文件的本地更改[重复]
【发布时间】:2015-09-25 17:09:31
【问题描述】:

我正在尝试撤消对特定文件的本地更改。没有任何承诺。

当我想恢复所有更改时,我可以执行git revert --reset HEAD。但是,在这种情况下,我不想恢复对所有文件的所有更改。

即使在阅读了git-revert(3) 手册页之后,我也不清楚如何仅恢复一个文件:

NAME
       git-revert - Revert some existing commits

SYNOPSIS
       git revert [--[no-]edit] [-n] [-m parent-number] [-s] <commit>...
       git revert --continue
       git revert --quit
       git revert --abort
...

这类似于How to revert a specific file in a old commit on git,但没有执行任何提交。与想要返回任意提交的 OP 不同,我只希望文件返回到 MASTER 的副本。

在 SVN 下,我只需删除有问题的文件,然后执行svn update

如何恢复对单个文件的更改?

【问题讨论】:

  • git checkout -- &lt;file&gt; ?
  • 感谢 NightShadeQueen。我没有结帐。我正在使用 git 提供的默认工作空间。也就是我演了一个git clone然后就去上班了。

标签: git git-revert


【解决方案1】:

你不想要git revert。这会撤消先前的提交。您希望git checkout 从 master 获取文件的 git 版本。

git checkout -- filename.txt

一般来说,当你想对单个文件执行 git 操作时,使用-- filename



2020 年更新

Git introduced 一个新命令 git restore 在版本 2.23.0 中。因此,如果你有 git 版本 2.23.0+,你可以简单地使用 git restore filename.txt - 它与 git checkout -- filename.txt 做同样的事情。该命令的文档确实指出它目前是实验性的。

【讨论】:

  • 我没有结帐。我正在使用 git 提供的默认工作空间。也就是我演了一个git clone然后就去上班了。
  • 没关系。该命令仍然有效。您隐式检出您克隆的任何分支。另外,运行git status 应该有一个单行解释如何恢复未暂存的更改。 (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)
  • git checkout -- "my file name with spaces.txt" - 使用双引号将您的文件名括起来以防有空格。
  • 这对我不起作用。仍然说“错误:您对以下文件的本地更改将被合并覆盖”
  • @CiprianTomoiaga 这不是严格要求的。它用于Argument Disambiguation(解决分支名称和文件名之间的冲突)。如果您提供它,它后面的参数将始终被解释为文件名,这是此处所需的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 2020-05-17
  • 2015-01-30
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多