Git push時に「rejected」が出たときの解決方法まとめ

Gitは、ソフトウェア開発におけるバージョン管理システムとして広く利用されていますが、時折「push rejected」というエラーに直面することがあります。このエラーは、リモートリポジトリに変更をプッシュしようとした際に発生し、通常はローカルとリモートの状態が一致していないことが原因です。

この記事では、Git push時に「rejected」が出たときの原因とその解決方法について詳しく解説します。

1. Git push rejectedの基本理解

git push rejectedエラーは、リモートリポジトリに対してローカルの変更をプッシュしようとした際に、リモートの状態がローカルの状態と異なる場合に発生します。

このエラーは、以下のような状況でよく見られます。

  • 他の開発者がリモートリポジトリに変更をプッシュした。
  • ローカルでの変更がリモートの変更と競合している。
  • リモートリポジトリのブランチが保護されている。

2. 一般的なエラーの種類

Git push rejectedエラーにはいくつかの種類がありますが、最も一般的なものは以下の通りです。

2.1. non-fast-forwardエラー

このエラーは、リモートリポジトリにある変更がローカルにない場合に発生します。具体的には、リモートのブランチがローカルのブランチよりも進んでいる場合です。

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'

2.2. rejected due to branch protection rules

リモートリポジトリに設定されたブランチ保護ルールにより、特定の条件を満たさないとプッシュが拒否されることがあります。例えば、コードレビューが必要な場合などです。

2.3. permission deniedエラー

このエラーは、リモートリポジトリに対するプッシュ権限がない場合に発生します。特に、他のユーザーのリポジトリにプッシュしようとした場合に見られます。

3. Git push rejectedの原因と解決策

それでは、具体的な原因とその解決策を見ていきましょう。

3.1. non-fast-forwardエラーの解決策

このエラーが発生した場合、まずはリモートの変更をローカルに取り込む必要があります。
以下の手順で解決できます。

リモートの変更を取得する
git fetch origin

このコマンドは、リモートリポジトリの最新の変更をローカルに取得します。

マージまたはリベースを行う

取得した変更をローカルのブランチにマージするか、リベースします。

  • マージの場合
    • git merge origin/master
  • リベースの場合
    • git rebase origin/master
    • リベースを選択すると、ローカルのコミットがリモートの変更の上に積み重ねられます。
再度プッシュする

変更をマージまたはリベースした後、再度プッシュを試みます。

git push origin master

3.2. ブランチ保護ルールによる拒否の解決策

ブランチ保護ルールが原因でプッシュが拒否された場合、以下の手順を試みます。

  1. ルールを確認する
    • リモートリポジトリの設定を確認し、どのような保護ルールが設定されているかを把握します。
  2. 必要な手続きを行う
    • コードレビューやテストを通過させる必要がある場合は、必要な手続きを行います。
  3. プルリクエストを作成する
    • 直接プッシュできない場合は、プルリクエストを作成して変更を提案します。

3.3. permission deniedエラーの解決策

このエラーが発生した場合、以下の手順を試みます。

  1. リモートリポジトリの権限を確認する
    • 自分がリモートリポジトリに対してプッシュ権限を持っているか確認します。
  2. SSHキーや認証情報を確認する
    • SSHキーや認証情報が正しく設定されているか確認します。必要に応じて、SSHキーを再生成し、GitHubやGitLabに追加します。
    • ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. リモートURLを確認する
    • リモートリポジトリのURLが正しいか確認します。
    • git remote -v

4. 強制プッシュの使用

場合によっては、強制プッシュを使用することが必要になることがあります。ただし、これはリモートの履歴を上書きするため、注意が必要です。

git push origin master --force

このコマンドは、リモートのブランチを強制的に上書きしますが、他の開発者の変更を失う可能性があるため、使用する際は十分に注意してください。

5. まとめ

Git push rejectedエラーは、開発者にとって一般的な問題ですが、適切な手順を踏むことで解決できます。
以下のポイントを再確認しましょう。

  • リモートの変更を取得し、マージまたはリベースする
    • non-fast-forwardエラーが発生した場合は、まずリモートの変更を取り込みましょう。
  • ブランチ保護ルールを確認する
    • プッシュが拒否された場合は、リモートリポジトリの設定を確認し、必要な手続きを行います。
  • 権限を確認する
    • permission deniedエラーが発生した場合は、自分の権限を確認し、SSHキーや認証情報を適切に設定します。
  • 強制プッシュは慎重に使用する
    • 強制プッシュはリモートの履歴を上書きするため、他の開発者に影響を与える可能性があります。

これらの対策を講じることで、Gitのpushエラーを効果的に解決し、スムーズな開発を進めることができるでしょう。

参考

タイトルとURLをコピーしました