0
0

[GitHub] ローカルの変更をリモートの最新の状態の上に適用する!(リベース)

Last updated at Posted at 2024-04-28

GitHubに最初のプッシュをしようとしたときにいくつかのエラーが出たため、こちらで整理します!🙌
今回の肝は、$ git pull --rebase origin main です。

後ほど再喝しますが、以下の記事が今回の git コマンドを理解するのに非常に参考になりました。

対象

  • 未来の自分
  • 以下の前提に合致する方

前提

  • GitHubで、リモートリポジトリを作成済み
  • リモートリポジトリに READ.ME ファイルが生成されている
  • 初めてのプッシュを行う

本題

私が入力した、はじめのコマンドです。

# GitHubとGitを紐付け
$ git remote add origin https://github.com/ユーザー名/リポジトリ名.git

問題なく実行されたので、プッシュを試みますがエラーが出て失敗しています。

# 新規ファイルなどをGitHubにプッシュ
$ git push -u origin main
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/ユーザー名/リポジトリ名.git'

このエラーメッセージ「error: src refspec main does not match any」は、指定したブランチ(この場合はmain)がローカルリポジトリに存在しないため、プッシュ操作が失敗したことを示しています。

これを解決するために、まずはリモートリポジトリをローカルに複製します。そうすると、自動的にローカルリポジトリにmainブランチが誕生します。

$ git fetch とは「リモートのコピーをローカルにダウンロードする」コマンドです。ローカルのリモート追跡ブランチ(リモートのコピー置き場)にコピーしてくるだけなのでワーキングツリーには何も影響を及ぼしません。

# リモートのコピーをローカルに複製
$ git fetch

もう一度、プッシュを試みますが失敗します。

$ git push -u origin main
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/ユーザー名/リポジトリ名.git'

エラーメッセージ「error: src refspec main does not match any」と表示される場合、通常、ローカルブランチにまだコミットが存在しないことが原因です。Gitでは、何かしらのコミットが存在しないと、ブランチをリモートにプッシュすることができません。

これを解決するために、新規ファイル(もしくは変更)をワークツリーからインデックスに複製し、それをローカルのリモートリポジトリに複製します。そして最後、GitHubのリモートリポジトリに複製(プッシュ)します。

# 新規ファイルをインデックスに複製
$ git add .

# インデックスにある複製を、今度はローカルのリモートリポジトリに複製
$ git commit -m "Initial commit"

# 最後、ローカルのリモートリポジトリの複製をリモートリポジトリ(GitHub)に複製
$ git push -u origin master

プッシュを試みた際のエラーです。

$ git push -u origin main
To https://github.com/ユーザー名/リポジトリ名.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/ユーザー名/リポジトリ名.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

エラーメッセージによると、リモートのmainブランチにはローカルブランチにない変更が存在しており、それがプッシュの拒否の原因になっています。これは通常、他の誰かがリポジトリにプッシュした結果、ローカルとリモートの履歴が食い違っている場合に発生します。

これを解決するためには、リモートの変更をローカルに統合してから再度プッシュを試みる必要があります。

リモートの変更をローカルに統合(マージまたはリベース)

まず、リモートの変更をローカルブランチに取り込むために git pull を使用します。ここで git pull をそのまま実行するとマージが行われますが、履歴を直線的に保ちたい場合はリベースを使用することが推奨されます。

リベースを行うことで、ローカルの変更がリモートの最新の状態の上に適用されます。

$ git pull --rebase origin main

変更をプッシュ

リモートの変更をローカルに統合し、再度プッシュを試みます。

$ git push -u origin main

無事にプッシュができました😊

0
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
0
0