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が発生すれば該当箇所を手動で直す手間が発生する。

