是否有可能在Git中恢复已提交的文件?我已经向GitHub提交了一个提交,然后我意识到有一个我不想被推送的文件(我还没有完成更改)。
答案 0 :(得分:79)
更新:添加了更安全的方法
检查文件的上一个(未更改)状态;注意双破折号
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
真的,请考虑使用之前提到的首选方法。
答案 1 :(得分:17)
您只能将一个文件还原为指定的修订版。
首先,您可以检查文件更改的提交。
git log path/to/file.txt
然后你可以用版本号签出文件。
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
之后你可以提交并再次推送它。
答案 2 :(得分:16)
如果要从远程存储库中删除文件,请首先使用--cache选项将其从项目中删除,然后将其推送:
git rm --cache /path/to/file
git commit -am "Remove file"
git push
(即使文件已在某些提交之前添加到远程仓库中,此方法也有效) 请记住,将。不想忽略的文件扩展名添加到.gitignore。
答案 3 :(得分:5)
将文件重置为正确状态,提交并再次推送。
如果您确定还没有其他人提取您的更改,您可以在提交时使用--amend
,修改之前的提交(即重写历史记录),然后推送。我认为你在推动时必须使用-f
选项,以强制推动。
答案 4 :(得分:1)
获取上一次提交的哈希码。
git log
git revert <hash_code_from_git_log>
git push
在GHR中签出。您可能会得到所需的东西,希望这对您有用
答案 5 :(得分:0)
使用
git rm --cached /path/to/file
然后添加,提交和推送。就像上面的答案一样,但您需要使用 --cached
而不是 --cache
。
答案 6 :(得分:0)
您可以使用以下工作流程:
git reset --soft HEAD~1
git reset HEAD /path/to/file