Github新規リポジトリ作成とpush出来ない時の対策
ローカルまたはGithubで作成したリポジトリを連携する手順と、上手くいかなくてreject
された際の解決法を備忘録に残す。
目次
Gihub側の手順
画像はKoushi Kagawaさん作成のQiita記事「ローカルのディレクトリをGithubへアップロードする方法1」から引用させて頂きます。
Githubリポジトリを作成する。 GIthubのマイページを開き「New」をクリックする。> ここをクリックするとGithubが開かれるよ
リポジトリ作成画面に遷移するので、リポジトリ名を記入して「Create repository」をクリックする。Gitで先に作っているならディレクトリと同名にしておく。
Gitの手順
ターミナルでGithubにアップしたいディレクトリに移動する。Githubで先に作っているならリポジトリと同名にしておく。
cd [アップしたいディレクトリ]
リポジトリを初期化する「git init」を実行する。
git init
Githubにアップしたいファイルとディレクトリをコミットする。
git add .
git commit -m “first commit”
Githubで作成したリポジトリをリモートリポジトリとして登録する。当然だがGithub上でリポジトリを作っておくこと。
git remote add origin [GithubのリポジトリURL]
commit
してあるなら、あとはpush
するだけ。
git push origin master
Githubのページを見るとファイルがアップロードされているのが確認できる。
pushが上手くいかずrejectされてしまった場合
push
しようとしたらreject
されてしまった場合、考えられる原因は以下の通り。
- リモートリポジトリ(Git側データ)で新規ファイル or フォルダを作成 (例えばREADME)
- ローカルリポジトリ(PC側データ)内にそのファイル or フォルダがない
例えばGitHubで新規リポジトリを作る際、README.mdも作ってしまいリモートとローカルに差分が出てしまったなど。
よって、以下の方法を試して解消する必要がある2。要は大抵リモートの変更が反映されていないことが原因で起こるので、改めてマージを行ってpush
をしてみると良い。
1. fetch > merge を試みる
やっていることはpull
だが、pull
は現在のブランチが意図した場所と違ってもマージしてしまう可能性がある。
あまり推奨されていないのでfetch > merge
の順で解決するのが望ましい。
この2つの違いを平たく言うと、merge
コミットをコミットを積み直して1本にするイメージ。
git fetch
git merge origin/master
2. fetch > rebase を試みる
fetch > merge
で解消されなければfetch > rebase
をしてみる。
git fetch
git rebase origin/master
2つの違いを大雑把に説明すると、merge
は非破壊的操作でブランチ毎の履歴を残す統合方法だが、rebase
はbranch毎に作られたコミットを一本の履歴に統合する方法である。
要は他の差分(コミット)を全部ひっくるめてまとめてしまう。消したくないコミットがある場合は注意が必要。
ゆえにrebase
は多少強引にpush
できる状態にするのだが、どちらの方法でもCONFLICTが発生すれば該当箇所を手動で直す手間が発生する。