在Git中是否有可能恢复已提交的文件?我已经将一个提交到GitHub,然后我意识到有一个文件我不想被推送(我还没有完成更改)。


当前回答

您可以使用以下工作流:

git reset --soft HEAD~1
git reset HEAD /path/to/file

其他回答

如果你想从远程repo中删除文件,首先用——cache选项从项目中删除它,然后推送它:

git rm --cached /path/to/file
git commit -am "Remove file"
git push

(即使文件在一些提交之前添加到远程repo,也可以工作) 记得在.gitignore中添加你不想推送的文件扩展名。

使用 Git rm——缓存/路径/到/文件 然后添加、提交和推送。就像上面的答案,但你需要使用缓存而不是缓存。

只能将一个文件恢复到指定的修订版本。

首先,您可以检查哪些提交文件被更改。

git log path/to/file.txt

然后您可以用修订号签出该文件。

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

之后,您可以提交并再次推送它。

将文件重置为正确的状态,提交并再次推送。

如果你确定还没有人获取你的更改,你可以在提交时使用——amend来修改你之前的提交(即重写历史),然后push。不过,我认为在push时必须使用-f选项来强制push。

更新:增加了更安全的方法

首选的方法:

检查出文件的先前(未更改的)状态;注意双破折号 git checkout HEAD^——/path/to/file 提交: Git commit -am“恢复该文件上的更改,尚未完成” 推它,不需要用力: git推 回到你未完成的工作,再次做(3次箭头向上): git checkout HEAD^——/path/to/file

有效地“uncommitting”:

修改存储库HEAD的最后一次提交,混淆你意外推送的工作,同时可能会与你的同事发生冲突,他可能已经拉了它,他会变得灰白,并浪费大量时间试图调和他的本地分支HEAD与中央分支HEAD:

删除上次提交的文件更改:

要将文件恢复到上次提交之前的状态,请执行以下操作: git checkout HEAD^ /path/to/file 要用恢复后的文件更新上次提交,请执行以下操作: Git提交—修改 要将更新后的提交推入回购,请执行以下操作: Git push -f

实际上,可以考虑使用前面提到的首选方法。