是否有可能在 Git 中恢复已提交的文件?我已经向 GitHub 推送了一个提交,然后我意识到有一个我不想被推送的文件(我还没有完成更改)。
7 回答
更新:添加了更安全的方法
首选方法:
检查文件的先前(未更改)状态;注意双破折号
git checkout HEAD^ -- /path/to/file
提交它:
git commit -am "revert changes on this file, not finished with it yet"
推动它,无需用力:
git push
回到你未完成的工作,再次做(3次箭头向上):
git checkout HEAD^ -- /path/to/file
有效地“取消承诺”:
修改存储库 HEAD 的最后一次提交,混淆你不小心推送的工作,同时可能会与你的同事发生冲突,他可能已经拉过它,并且会长出白发并浪费大量时间来协调他的本地分支负责人与中央:
要从上次提交中删除文件更改:
要将文件恢复到上次提交之前的状态,请执行以下操作:
git checkout HEAD^ /path/to/file
要使用恢复的文件更新最后一次提交,请执行以下操作:
git commit --amend
要将更新的提交推送到 repo,请执行以下操作:
git push -f
真的,考虑使用前面提到的首选方法。
如果你想从远程仓库中删除文件,首先使用 --cache 选项从你的项目中删除它,然后推送它:
git rm --cache /path/to/file
git commit -am "Remove file"
git push
(即使文件在某些提交之前被添加到远程仓库,这仍然有效)记住将您不想推送的文件扩展名添加到 .gitignore。
您只能将一个文件还原为指定的修订版。
首先,您可以检查文件更改了哪些提交。
git log path/to/file.txt
然后您可以签出带有修订号的文件。
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
之后,您可以再次提交并推送它。
将文件重置为正确状态,提交并再次推送。
如果您确定没有其他人获取您的更改,您可以--amend
在提交时使用,修改您之前的提交(即重写历史记录),然后推送。不过,我认为您必须-f
在推送时使用该选项来强制推送。
您可以使用以下工作流程:
git reset --soft HEAD~1
git reset HEAD /path/to/file
获取上次提交的哈希码。
git log
- 恢复提交
git revert <hash_code_from_git_log>
- 推送更改
git push
在 GHR 中查看。你可能会得到你需要的东西,希望这对你有用
使用
git rm --cached /path/to/file
然后添加、提交和推送。就像上面的答案一样,但你需要使用--cached
not --cache
。