初めてGitHubリポジトリにpushしたらrejectedエラーになったときの対応メモ

  • 65
    いいね
  • 3
    コメント

はじめに

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

Gitバージョン

% git --version
git version 2.9.2

作業の流れ

GitHubからリポジトリを作成

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

ローカルリポジトリに追加
% git add -A
ロカールリポジトリにコミット
% git commit -m "xxxxx"
リモートリポジトリ(GitHub)の情報を追加
% git remote add origin https://github.com/xxxx/xxxxx.git
ローカルリポジトリをリモートリポジトリへ反映させる → rejectedエラー
% 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エラー
% git fetch && git merge origin/master
fatal: refusing to merge unrelated histories
さらにググってみたらmergeのオプションに「--allow-unrelated-histories」をつければOKと書いてあったので試してみる → merge OK!
% 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エラーになったのかなと。