GitHub初心者の僕が、初めてGitHubリポジトリにpushしたら、rejectedエラーになったので、ちゃんとpushできるようになるまでの対応をメモしました。

はじめに


GitHub初心者の僕が、初めてGitHubリポジトリにpushしたら、rejectedエラーになったので、ちゃんとpushできるようになるまでの対応をメモしました。

Gitバージョン

1
2
% git --version
git version 2.9.2

作業の流れ

GitHubからリポジトリを作成

「Initialize this repository with a README」にチェック

ローカルリポジトリに追加

1
% git add -A

ロカールリポジトリにコミット

1
% git commit -m "xxxxx"

リモートリポジトリ(GitHub)の情報を追加

1
% git remote add origin https://github.com/xxxx/xxxxx.git

ローカルリポジトリをリモートリポジトリへ反映させる → rejectedエラー

1
2
3
4
5
6
7
8
9
% git push origin master
To https://github.com/xxxx/xxxxx.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/xxxx/xxxxx.git'
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.

ググってみたら「git fetch && git merge origin/master」してからpushすればOKと書いてあったので試してみる → mergeエラー

1
2
% git fetch && git merge origin/master
fatal: refusing to merge unrelated histories

さらにググってみたらmergeのオプションに「–allow-unrelated-histories」をつければOKと書いてあったので試してみる → merge OK!

1
2
3
4
5
% git merge --allow-unrelated-histories origin/master
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 README.md

再度、ローカルリポジトリをリモートリポジトリへ反映させる → push OK!

一件落着

「–allow-unrelated-histories」について


ちゃんと調べてみたところ
Git 2.9から mergeコマンドとpullコマンドでは,–allow-unrelated-historiesを指定しない限り,無関係なヒストリを持つ2つのブランチをマージすることはできなくなった。
とありました。

考察


まだ、GitHub、Gitの理解が浅いので見当違いなことを言っているかもしれませんが、GitHub上でリポジトリを作成したタイミングで、README.mdがコミットされているのに、それをローカルリポジトリに取り込まずに、ローカルのソースをコミットしてしまったのが原因と思われる。
結果、それぞれが別ヒストリとなり、mergeエラーになったのかなと。