LoginSignup
2
0

More than 3 years have passed since last update.

git pushしたら、! [rejected] main -> main (fetch first) error: failed to push some refs to "リモートリポジトリ名" で怒られた。

Posted at

原因

下の流れで作業したため怒られました。

①mainからブランチを切って作業

$ git checkout -b 作業ブランチ

のち、色々実装して、push

② ①と並行して、githubのmainブランチのreadmeの内容を変更

※ここが不味かった

③mainチェックアウト

$ git checkout main

④作業ブランチをマージ

$ git merge 作業ブランチ

⑤mainブランチをpush

$ git push

ここで! [rejected] main -> main (fetch first) error: failed to push some refs to "リモートリポジトリ名"と怒られる。

対処法

$ git pull すれば、解決はするのですが、そもそもgitの構造を理解していなかった。

追跡ブランチの存在

リモートのmainとローカルのorigin/mainは別物ということを知らず、全く意識していませんでした。

ローカルのorigin/mainは、追跡ブランチと呼ばれているそうで、リモートのmainブランチを追跡しています。
pushする際に、リモートブランチをローカルの追跡ブランチに差分があると、(共通のコミット上に異なるコミットが追加されている状態)、pushできない。
今回、push出来なかったのは、リモート側のブランチに余計なコミットがあったため、push出来なかった。

git pullするとどうなるのか

git pullすると、リモートのブランチの内容が追跡ブランチに反映されます。そうすることで、差分がなくなり、pushできるようになります。

おまけ

git pullだけでもいいですが、省略せずに書くと、このようになります。

$ git pull origin main:main
# git pull <ローカルのブランチ名>:<リモートのブランチ名>
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0