【问题标题】:How do I revert Git changes that I haven't committed? [duplicate]如何恢复尚未提交的 Git 更改? [复制]
【发布时间】:2018-11-26 21:37:49
【问题描述】:

我在 Mac OS X 上使用 git。如何恢复对文件的更改?更改尚未提交。我试过了

localhost:myproject davea$ git checkout -- .gitignore
error: pathspec '.gitignore' did not match any file(s) known to git.

上述错误没有意义,因为当我尝试从远程存储库中提取时,它抱怨我有无法覆盖的文件...

localhost:myproject davea$ git pull origin master
Username for 'https://github.com': myuser
Password for 'https://myuser@github.com': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/JBSinc/myproject.git/'
localhost:myproject davea$ git pull origin master
Username for 'https://github.com': myuser
Password for 'https://myuser@github.com': 
From https://github.com/JBSinc/myproject
 * branch            master     -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
    .gitignore
Please move or remove them before you can merge.
Aborting

【问题讨论】:

  • 由于文件没有被追踪,考虑用rmgit clean删除。

标签: git revert vcs-checkout


【解决方案1】:

'.gitignore' 是防止 git 命令影响其中定义的任何文件或目录的文件。 如果它对您没有用,您可以按照上面的建议使用 rm 将其删除。 你的 git 命令不会影响它。 此外,在其他情况下,当您想要删除未跟踪的文件时,您可以随时使用:

git clean --force

这将静默删除任何未提交的内容,并且您的目录将是干净的。

【讨论】:

    【解决方案2】:

    让我们首先假设“尚未提交”,您的意思是更改只是在工作树中,而不是在索引中暂存。暂存于索引中的文件也“尚未提交”。

    要恢复对文件的更改,一个好方法是:

    git checkout --patch <filename>
    

    这将交互式地引导您了解“差异大块”,以便您可以选择性地丢弃一些更改,同时保留其他更改。如果没有--patch,整个文件将以非交互方式恢复。当然,可以指定多个文件。如果您不提供任何文件名,则处理所有更改的文件。

    文件恢复到索引中的版本。也就是说,如果您对文件进行了一些更改,然后使用git add &lt;file&gt; 暂存它,然后进行了您现在正在恢复的后续更改,它们将针对文件的暂存版本进行恢复。

    要恢复已暂存的更改,一种简单的方法是首先使用 git reset 取消暂存它们:

    git reset <file>
    

    现在&lt;file&gt; 中的所有更改都在树中;没有一个是上演的,我们可以通过上面的git checkout 练习。

    使用git checkout 丢弃的工作副本更改将永久消失;如果您认为自己可能会改变主意,请保留备份或使用 git stash 隐藏更改。

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 2016-08-15
      • 2020-05-15
      • 2018-07-01
      • 2013-09-30
      • 2012-08-15
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      相关资源
      最近更新 更多