ローカルまたは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が発生すれば該当箇所を手動で直す手間が発生する。


  1. ローカルのディレクトリをGithubへアップロードする方法 ↩︎

  2. 【git】git pushがrejectされたときの対応方法 ↩︎