Git:プッシュ後にコミットされたファイルを削除する


104

Gitでコミットされたファイルを元に戻す可能性はありますか?コミットをGitHubにプッシュしましたが、プッシュしたくないファイルがあることに気付きました(変更を完了していません)。


プッシュ後にGitHubからファイルを完全に削除しますか?それ以外の場合は、git rm <file>、git pushのみです。
rdrmntn 2013


回答:


144

更新:より安全なメソッドを追加

推奨される方法:

  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. 更新されたコミットをリポジトリにプッシュするには、次のようにします。

    git push -f
    

実際には、前述の推奨方法の使用を検討してください。


1
あなたがプロジェクトの唯一の開発者でない限り、本当にgit push -fを使用すべきではありません。それは価値があるよりもはるかに多くの問題を作成します。ファイルを削除してから、新しいコミットを実行してください。
richardm 2017年

1
@ user553086はこれ以上同意できませんでした。今はまし?
xor '20年

これはコミットを歴史に遡って実行できますか?たとえば、私はこれを行うことができgit checkout HEAD~2 /path/to/fileますか?編集:私の場合、私が望んでいたのは単純に見えたgit rm /path/to/file
starscream_disco_party

1
あなたはちょうど私を仲間4時間救った!
Tosin Onikute

52

リモートリポジトリからファイルを削除する場合は、まず--cacheオプションを使用してプロジェクトからファイルを削除してから、プッシュします。

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

(これは、ファイルがいくつかのコミット前にリモートリポジトリに追加された場合でも機能します)プッシュしたくないファイル拡張子を.gitignoreに追加することを忘れないでください。


2
これにより、このコミットからファイルが削除されますが、ファイルは古いコミット内で引き続き表示されます。
Ken

29

指定したリビジョンに戻すことができるファイルは1つだけです。

最初に、ファイルが変更されたコミットを確認できます。

git log path/to/file.txt

次に、リビジョン番号を含むファイルをチェックアウトできます。

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

その後、コミットして再度プッシュできます。


7

ファイルを正しい状態にリセットし、コミットして、もう一度プッシュします。

まだ誰も変更をフェッチしていないことが確かな場合は--amend、コミット時にを使用して、以前のコミットを変更(つまり、履歴を書き換え)してからプッシュできます。私はあなたが-f押しているとき、しかし押しを強制するためにオプションを使用する必要があると思います。


3
  1. 最後のコミットのハッシュコードを取得します。

    • git log
  2. コミットを元に戻す
    • git revert <hash_code_from_git_log>
  3. 変更をプッシュする
    • git push

GHRで確認してください。あなたは必要なものを手に入れるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.