如何还原我未提交的 Git 更改?
How do I revert Git changes that I haven't committed?
我在 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
让我们首先假设 "not commited yet",您的意思是更改仅在工作树中,而不是在索引中暂存。索引中暂存的文件也是 "not committed yet".
要恢复对文件的更改,一个好方法是:
git checkout --patch <filename>
这将以交互方式引导您完成 "diff hunks",以便您可以有选择地放弃某些更改,同时保留其他更改。如果没有 --patch
,整个文件将以非交互方式恢复。当然也可以指定多个文件。如果您不提供任何文件名,则会处理所有有更改的文件。
文件恢复到索引中的版本。也就是说,如果您对文件进行了一些更改,然后使用 git add <file>
将其暂存,然后进行了您现在要还原的后续更改,它们将根据文件的暂存版本还原。
要还原暂存的更改,一个简单的方法是先使用 git reset
:
取消暂存它们
git reset <file>
现在 <file>
中的所有更改都在树中; none是上演的,我们可以通过上面的git checkout
练习。
使用 git checkout
丢弃的工作副本更改已永久消失;如果您认为自己可能会改变主意,请保留备份或使用 git stash
存储更改。
'.gitignore' 是防止您的 git 命令影响其中定义的任何文件或目录的一个文件。
如果它对你没用,你可以按照上面的建议用 rm 删除它。
您的 git 命令不会影响它。
另外,在其他情况下,当您有想要删除的未跟踪文件时,您可以随时使用:
git clean --force
这将默默地删除所有未提交的内容,您的目录将是干净的。
我在 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
让我们首先假设 "not commited yet",您的意思是更改仅在工作树中,而不是在索引中暂存。索引中暂存的文件也是 "not committed yet".
要恢复对文件的更改,一个好方法是:
git checkout --patch <filename>
这将以交互方式引导您完成 "diff hunks",以便您可以有选择地放弃某些更改,同时保留其他更改。如果没有 --patch
,整个文件将以非交互方式恢复。当然也可以指定多个文件。如果您不提供任何文件名,则会处理所有有更改的文件。
文件恢复到索引中的版本。也就是说,如果您对文件进行了一些更改,然后使用 git add <file>
将其暂存,然后进行了您现在要还原的后续更改,它们将根据文件的暂存版本还原。
要还原暂存的更改,一个简单的方法是先使用 git reset
:
git reset <file>
现在 <file>
中的所有更改都在树中; none是上演的,我们可以通过上面的git checkout
练习。
使用 git checkout
丢弃的工作副本更改已永久消失;如果您认为自己可能会改变主意,请保留备份或使用 git stash
存储更改。
'.gitignore' 是防止您的 git 命令影响其中定义的任何文件或目录的一个文件。 如果它对你没用,你可以按照上面的建议用 rm 删除它。 您的 git 命令不会影响它。 另外,在其他情况下,当您有想要删除的未跟踪文件时,您可以随时使用:
git clean --force
这将默默地删除所有未提交的内容,您的目录将是干净的。