166

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

4

7 回答 7

206

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

首选方法:

  1. 检查文件的先前(未更改)状态;注意双破折号

    git checkout HEAD^ -- /path/to/file
    
  2. 提交它:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. 推动它,无需用力:

    git push
    
  4. 回到你未完成的工作,再次做(3次箭头向上):

    git checkout HEAD^ -- /path/to/file
    

有效地“取消承诺”:

修改存储库 HEAD 的最后一次提交,混淆你不小心推送的工作,同时可能会与你的同事发生冲突,他可能已经拉过它,并且会长出白发并浪费大量时间来协调他的本地分支负责人与中央:

要从上次提交中删除文件更改:

  1. 要将文件恢复到上次提交之前的状态,请执行以下操作:

    git checkout HEAD^ /path/to/file
    
  2. 要使用恢复的文件更新最后一次提交,请执行以下操作:

    git commit --amend
    
  3. 要将更新的提交推送到 repo,请执行以下操作:

    git push -f
    

真的,考虑使用前面提到的首选方法。

于 2014-02-26T12:25:20.243 回答
116

如果你想从远程仓库中删除文件,首先使用 --cache 选项从你的项目中删除它,然后推送它:

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

(即使文件在某些​​提交之前被添加到远程仓库,这仍然有效)记住将您不想推送的文件扩展名添加到 .gitignore。

于 2018-07-19T08:33:26.863 回答
48

您只能将一个文件还原为指定的修订版。

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

git log path/to/file.txt

然后您可以签出带有修订号的文件。

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

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

于 2013-08-21T12:36:59.170 回答
6

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

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

于 2013-08-21T12:36:09.477 回答
4

您可以使用以下工作流程:

git reset --soft HEAD~1
git reset HEAD /path/to/file
于 2021-07-02T13:21:08.517 回答
3
  1. 获取上次提交的哈希码。

    • git log
  2. 恢复提交
    • git revert <hash_code_from_git_log>
  3. 推送更改
    • git push

在 GHR 中查看。你可能会得到你需要的东西,希望这对你有用

于 2018-07-09T21:31:45.283 回答
3

使用 git rm --cached /path/to/file 然后添加、提交和推送。就像上面的答案一样,但你需要使用--cachednot --cache

于 2021-06-18T14:19:14.770 回答