如何恢复我没有提交的Git更改? [重复]

问题描述 投票:0回答:2

我在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://[email protected]': 
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://[email protected]': 
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
git revert vcs-checkout
2个回答
0
投票

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

git clean --force

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


0
投票

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

要还原对文件的更改,一个好方法是:

git checkout --patch <filename>

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

该文件将还原到索引中的版本。也就是说,如果您对文件进行了一些更改然后使用git add <file>进行了更改,然后进行了后续更改,那么它们将恢复为文件的暂存版本。

要恢复分阶段的更改,一个简单的方法是首先使用git reset取消它们:

git reset <file>

现在<file>的所有变化都在树上;没有人上演,我们可以通过上面的git checkout练习。

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

© www.soinside.com 2019 - 2024. All rights reserved.