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

时间:2013-08-21 12:31:49

标签: git github

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

7 个答案:

答案 0 :(得分:79)

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

首选方法:

  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
    
  5. 有效'不承认':

    修改存储库HEAD的最后一次提交,混淆你意外推送的工作,同时可能与你的同事发生冲突,而你的同事可能已经把它拉过来了,谁会长出白发并且失去大量时间试图调和他的当地分支机构负责人:

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

    1. 将文件恢复到上次提交之前的状态,执行:

      git checkout HEAD^ /path/to/file
      
    2. 使用恢复的文件更新上次提交,执行:

      git commit --amend
      
    3. 将更新的提交推送到repo,执行:

      git push -f
      
    4. 真的,请考虑使用之前提到的首选方法。

答案 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)

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

    • git log
  2. 还原提交
    • git revert <hash_code_from_git_log>
  3. 推送更改
    • 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