Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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エラーになったのかなと。

takanatsu
中小SIerです。以前はJava、今はPerl, Pythonメインです。ただいまRubyを勉強中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away