「fatal: Need to specify how to reconcile divergent branches.」の解消までの道のり
はじめに
ローカル環境でコミットして、それをリモートにpushした際に
fatal: Need to specify how to reconcile divergent branches.
このエラーに遭遇したので、今回はその解決までの道のりについて
記事にしてみようと思います。
調査
まずは上記エラー文で検索を行い、以下の記事を参考に解消を試みました。
こちらの記事に基づくと
gitのconfigを調整することによって解消されるみたいでした👀
gitのconfigについては以下を参照していただければと思います。
エラー文が出た背景の振り返り
ただconfigをいじらなければいけない程の作業をした覚えはなく、
何か別の策はないかと考えていました🤔
そこで当時の作業を振り返ってみたところ...
- リモートにしかないコミットがあった(ローカルにはpullしていない)
- その状態でローカルでコミットを行いpushした
- すると上記エラーが出た...
こうなっていました。
ここで重要なのは...
リモートにしかないコミットがあった(ローカルにはpullしていない)
これでした。
確かに、この状況だと上記のエラー文が出そうですね😅
解決策
そこで以下のように作業をいたしました。
手順1(任意):コミットしたい内容のバックアップをとる
後続の手順でローカルブランチの削除を行いますので、
必要なコミットについては事前にバックアップを取っておくことを推奨いたします。
ただ不要な方もいらっしゃるかと思われますので、
その際はこの手順はスキップしていただければと思います。
バックアップにはgit reset 各種のオプション
を用いますので、
以下の記事を参考に進めていただければと思います。
上記の記事で紹介されているコマンドの内、必要なコマンドを実行して、
コミットとして残しておきたい内容を特定して、
コピペなどでバックアップを取っておきます。
手順2:ローカルブランチの削除
ローカル環境を綺麗にするために、一旦ローカルブランチの削除を行います。
ローカルブランチの削除には
git branch -d 削除したいローカルブランチ
or
git branch -D 削除したいローカルブランチ
こちらを使います。
上記コマンドの違いについては以下を参照していただければと思います。
手順3:git fetchによる同期
リモートブランチをローカル環境に落として同期させるために
git fetch
こちらを使います。
手順4:削除したブランチにチェックアウト
「リモートにしかないコミットがあった(ローカルにはpullしていない)」
という問題が解消された状態になったので、
ここで削除したブランチにチェックアウトします。
git checkout 削除したブランチ
手順5:ローカル環境でコミットを行う
手順4までで問題は解消されたので、
最後は同期したローカル環境でコミットしたい内容を作り、
それをリモートにpushして終了です🙌
まとめ
表題のエラーで手間と取ってしまったので、
リモート環境でのコミットは極力避けたいですね😅
仮にそれをするとしても、チーム内での報連相は必要でしょうね💦
Discussion