背景
ローカルリポジトリを作成してからGitHubのリポジトリにpushをしようとした際にエラーが発生した。
前提
GitHub上にリポジトリを作成しておく。(リポジトリ作成時にREADME.mdも作成した)
今回出たエラー
- ローカルリポジトリとリモートリポジトリとの紐づけ忘れエラー
- rejectedエラー
- mergeエラー
やったこと
(★だけ追っていけばエラーを出さずにpushできる)
1.ローカルリポジトリ作成(★)
$ git init
2.ファイルを作成(★)
最初にコミット&プッシュする為の適当なファイル(RubyTraining.md)を作成。
3.ステージングエリアにmdファイルを登録(★)
$ git add RubyTraining.md
4.コミット(★)
$ git commit -m "RubyTrainingStart"
5.プッシュ
エラー発生。
原因:GitHub上のリポジトリとの紐づけを行わずにプッシュしてしまったため。
$ git push origin master
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
6.GitHub上のリポジトリとの紐づけ(★)
$ git remote add origin GitHub上のリポジトリのURL
7.プッシュ
rejectedエラー発生。
原因:フェッチとマージをしていなかったため。
$ git push origin master
Enter passphrase for key 'SSH Keyの保存場所':
To github.com:teraokamai/RubyTraining.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'リモートリポジトリのURL'
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.
8.フェッチ(★)
$ git fetch origin
9.マージ
mergeエラー発生
原因:mergeコマンドのオプションで--allow-unrelated-historiesをつけていない為。
(Git 2.9から mergeコマンドとpullコマンドでは,--allow-unrelated-historiesを指定しない限り,無関係なヒストリを持つ2つのブランチをマージすることはできなくなった。)
$ git merge origin/master
fatal: refusing to merge unrelated histories
10.マージ(★)
$ git merge --allow-unrelated-histories origin/master
11.プッシュ(★)
成功!
$ git push origin master
最後に
方法が本に載っていなかったため試しにやってみたところエラーがたくさん出てきた。
最初にGitだけで管理していたけれど、途中からGitHubで管理したくなった場合にはこの流れで進めれば問題ないと思う。
ゼロから作るなら、GitHubでリポジトリ作成をしてクローンする方が簡単。