誤って大きなファイルを「git push」してしまった後、ファイルを「.gitignore」に追加したり、削除しても、リポジトリの履歴として残るらしく、その後のリポジトリへのコミットやプッシュ動作が異常に重たく、遅くなる。

このような場合、バージョン管理システムとしては、コミット履歴を削除したりブランチを削除したりするのが適切な対処とされるだろうが、GitHubを個人でストレージとして利用しているような場合、面倒なので以下の方法をとるのが楽。



Gitリポジトリ履歴の削除/初期化


GitHubにすでに作成してあるリポジトリの場所(URL)はそのまま、履歴を削除して整理したディレクトリを新しくプッシュするための準備をまず行う。


リモートリポジトリのURLを確認


リポジトリ内の「./.git/config」ファイルに保存されているリモートリストの状態を確認して、URLを確認する。

これには以下のコマンドを用いる
git remote -v
取得したURLは、この後必要になるためメモしておく


.gitディレクトリの削除


次にリポジトリを構成しているディレクトリを削除する
rm -rf .git
その後、動作異常の原因となったファイルを削除したり、「.gitignore」に適応したりして、フォルダを整理する


.gitファイルの作成


先ほど削除した.gitディレクトリの新しいものを作成する
git init


リポジトリへプッシュする


このあとは、このローカルリポジトリとリモートリポジトリを紐づけてプッシュを行っていく

まず、いつも通りローカルリポジトリの変更をインデックスに追加して、コミットを行う。
git add .
git commit -a -m"Initial Commit"
次に、「./.git/config」ファイルに変更を加えて、リモートリポジトリへの新規接続を確立するために以下コマンドを実行
git remote add origin {上で保存したURL}
{上で保存したURL}は各自、先ほど保存しておいたURLに置き換える

最後に、リモートリポジトリへ強制的にプッシュ
git push -u origin main -f
以上で、履歴の削除とリモートディレクトリとローカルディレクトリの同期終了

上記「git push」した際、ブランチ名がmainじゃなくなっていてプッシュできない場合は、以下の手順で変更したければbranch名を変更可能


ブランチ名がmainじゃない時の修正方法


手順1:ローカルのブランチ名変更

ブランチ名の確認
git branch
ブランチ名をmainに変更する
git branch -m master main
大抵の場合「master」なので、上記をmasterとしたが、その他の名前の場合は書き換える


手順2:リモートのブランチ名変更
git push -u origin main
「-u」オプションをつけることで、プッシュと同時にmainを上流ブランチに設定する

エラー:
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to "URL"
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

このようなエラーが出た場合には、主に2つ解決策があります。

手法1:
最後に「-f」をつけることで強制的リモートの履歴を上書きしてpushする方法
git push -u origin main -f

手法2:
わけあって強硬手段を取りたくない場合、以下のようにエラー内容に従って「fetch」してから、「merge」する方法

以下のコマンドでfetchすることで、リモートレポジトリのコミット履歴をすべて取得してきます。
ただし、まだマージ(統合)はしていません。
git fetch
次にmargeすることで変更を統合します。
git merge
上記でリモートの内容とローカルの内容に齟齬がなくなったはずなので、pushできるはずです。
git push -u origin main


以上、毎回忘れるのでメモ

もちろん、バージョン管理システムとして複数人で管理しているような場合は、状況に合わせた適切な処置を行ってください。

▼参考記事




参考:

このエントリーをはてなブックマークに追加
コメントを閉じる

コメント

コメントフォーム
記事の評価
  • リセット
  • リセット