如何还原尚未提交的Git更改?

时间:2018-11-26 21:37:49

标签: git revert vcs-checkout

我在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

2 个答案:

答案 0 :(得分:0)

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

要将更改恢复到文件,一种好方法是:

git checkout --patch <filename>

这将以交互方式引导您浏览“差异块”,以便您可以选择性地放弃某些更改而保留其他更改。如果没有--patch,整个文件将以非交互方式还原。当然,可以指定多个文件。如果您不提供任何文件名,则将处理所有具有更改的文件。

文件将还原到索引中的版本。就是说,如果您对文件进行了一些更改,然后使用git add <file>对其进行了暂存,然后进行了您现在要还原的后续更改,则它们将针对文件的暂存版本进行还原。 / p>

要还原已分阶段的更改,一种简单的方法是首先使用git reset取消分阶段更改:

git reset <file>

现在<file>中的所有更改都在树中;没有任何阶段,我们可以通过上面的git checkout练习。

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

答案 1 :(得分:0)

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

git clean --force

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