🦁

「fatal: Need to specify how to reconcile divergent branches.」の解消までの道のり

に公開

はじめに

ローカル環境でコミットして、それをリモートにpushした際に

fatal: Need to specify how to reconcile divergent branches.



このエラーに遭遇したので、今回はその解決までの道のりについて

記事にしてみようと思います。

調査

まずは上記エラー文で検索を行い、以下の記事を参考に解消を試みました。

https://qiita.com/aogangcun/items/9d43c7b1aa6b616f9ce8

https://zenn.dev/azunasu/articles/92859cb37cbd96

https://zenn.dev/manase/scraps/a5de7f5d5cbed6

https://smv.hatenablog.com/entry/2023/11/03/185638

https://blog.agile.esm.co.jp/entry/git-warns-pulling-without-specifying-how-to-reconcile-divergent-branches



こちらの記事に基づくと

gitのconfigを調整することによって解消されるみたいでした👀

gitのconfigについては以下を参照していただければと思います。

https://note.nkmk.me/git-config-setting/

https://qiita.com/C_HERO/items/c35e679f0b03a5f06469

https://www.guri2o1667.work/entry/2023/12/12/【Github】/etc/gitconfigや~/.gitconfigの設定について

エラー文が出た背景の振り返り

ただconfigをいじらなければいけない程の作業をした覚えはなく、

何か別の策はないかと考えていました🤔

そこで当時の作業を振り返ってみたところ...

  • リモートにしかないコミットがあった(ローカルにはpullしていない)
  • その状態でローカルでコミットを行いpushした
  • すると上記エラーが出た...

こうなっていました。

ここで重要なのは...

リモートにしかないコミットがあった(ローカルにはpullしていない)



これでした。

確かに、この状況だと上記のエラー文が出そうですね😅

解決策

そこで以下のように作業をいたしました。

手順1(任意):コミットしたい内容のバックアップをとる

後続の手順でローカルブランチの削除を行いますので、

必要なコミットについては事前にバックアップを取っておくことを推奨いたします。

ただ不要な方もいらっしゃるかと思われますので、

その際はこの手順はスキップしていただければと思います。

バックアップにはgit reset 各種のオプションを用いますので、

以下の記事を参考に進めていただければと思います。

https://zenn.dev/takeda_kaho/articles/b1edbd33e91865



上記の記事で紹介されているコマンドの内、必要なコマンドを実行して、

コミットとして残しておきたい内容を特定して、

コピペなどでバックアップを取っておきます。

手順2:ローカルブランチの削除

ローカル環境を綺麗にするために、一旦ローカルブランチの削除を行います。

ローカルブランチの削除には

git branch -d 削除したいローカルブランチ
or
git branch -D 削除したいローカルブランチ

こちらを使います。

上記コマンドの違いについては以下を参照していただければと思います。

https://qiita.com/hogeta_/items/33d2334c9b1919bd5120

手順3:git fetchによる同期

リモートブランチをローカル環境に落として同期させるために

git fetch

こちらを使います。

手順4:削除したブランチにチェックアウト

「リモートにしかないコミットがあった(ローカルにはpullしていない)」

という問題が解消された状態になったので、

ここで削除したブランチにチェックアウトします。

git checkout 削除したブランチ

手順5:ローカル環境でコミットを行う

手順4までで問題は解消されたので、

最後は同期したローカル環境でコミットしたい内容を作り、

それをリモートにpushして終了です🙌

まとめ

表題のエラーで手間と取ってしまったので、

リモート環境でのコミットは極力避けたいですね😅

仮にそれをするとしても、チーム内での報連相は必要でしょうね💦

Discussion