Git:在推送后删除提交的文件

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

336075 次浏览

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

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

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

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

git log path/to/file.txt

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

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

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

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

首选的方法:

  1. 检查你的文件以前的(不变的)状态;注意双破折号

    git checkout HEAD^ -- /path/to/file
    
  2. commit it:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. push it, no force needed:

    git push
    
  4. get back to your unfinished work, again do (3 times arrow up):

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

effectively 'uncommitting':

To modify the last commit of the repository HEAD, obfuscating your accidentally pushed work, while potentially running into a conflict with your colleague who may have pulled it already, and who will grow grey hair and lose lots of time trying to reconcile his local branch head with the central one:

To remove file change from last commit:

  1. to revert the file to the state before the last commit, do:

    git checkout HEAD^ /path/to/file
    
  2. to update the last commit with the reverted file, do:

    git commit --amend
    
  3. to push the updated commit to the repo, do:

    git push -f
    

Really, consider using the preferred method mentioned before.

  1. 获取上次提交的哈希码。

    • git log
    • 李< / ul > < / >
    • 恢复提交
      • git revert <hash_code_from_git_log>
      • 李< / ul > < / >
      • 推送更改
        • git push
        • 李< / ul > < / >

在GHR退房。你可能会得到任何你需要的,希望这是有用的

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

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

(即使文件被添加到远程repo一些提交之前,这个工作) 记住在.gitignore中添加你不想推送的文件扩展名

< p >使用 git rm --cached /path/to/file 然后添加、提交和推送。就像上面的答案,但你需要使用--cached而不是--cache.

您可以使用以下工作流:

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