在Git中是否有可能恢复已提交的文件?我已经将一个提交到GitHub,然后我意识到有一个文件我不想被推送(我还没有完成更改)。
当前回答
更新:增加了更安全的方法
首选的方法:
检查出文件的先前(未更改的)状态;注意双破折号 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
实际上,可以考虑使用前面提到的首选方法。
其他回答
使用 Git rm——缓存/路径/到/文件 然后添加、提交和推送。就像上面的答案,但你需要使用缓存而不是缓存。
将文件重置为正确的状态,提交并再次推送。
如果你确定还没有人获取你的更改,你可以在提交时使用——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
实际上,可以考虑使用前面提到的首选方法。
只能将一个文件恢复到指定的修订版本。
首先,您可以检查哪些提交文件被更改。
git log path/to/file.txt
然后您可以用修订号签出该文件。
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
之后,您可以提交并再次推送它。
如果你想从远程repo中删除文件,首先用——cache选项从项目中删除它,然后推送它:
git rm --cached /path/to/file
git commit -am "Remove file"
git push
(即使文件在一些提交之前添加到远程repo,也可以工作) 记得在.gitignore中添加你不想推送的文件扩展名。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- 只用GitHub动作在特定分支上运行作业
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 是否有一个链接到GitHub下载文件的最新版本的存储库?