Posted at

merge で .gitconfig が壊れて merge commit にならない

More than 5 years have passed since last update.

昨今は dotfile の類を git 管理している人も多いことと思います。私も .gitconfig ファイルをバージョン管理しているのですが、つい先日、merge したのに merge commit にならないという現象に遭遇しました。その備忘録です。


以前、alias を追加定義したのですが、その .gitconfig への変更を push し忘れていました。そのまま長いこと放置していて、他のマシンでその alias を使えないことに気付いて追加、そちらで commit&push したところ、最初のマシンで pull したときに conflict が発生してしまいました。

「あぁ、同じ行を編集したから conflict したんだな」と思って、普段通りエディタで conflict 行を編集し、unresolved フラグを解消し、commit しようとしました。ところが、commit の段になってどうもおかしい。いつもなら、merge commit をする際には merge commit であることを示す以下のようなデフォルトのコミットメッセージが挿入され、conflict したファイルが示されます。


普段なら…

Merge remote-tracking branch 'origin/master' into master

Conflicts:
.gitconfig
# :
# :


しかし今回は、それがなかったのです。実際 merge 元が設定されていない普通の commit になり、git graph などで確認しても歴史のパスがただの一本道です。

どういうことかと思ってもう一度 merge するところから注意深くやり直してみました。すると、以下のようなメッセージが出ていました。

Auto-merging .zshrc

Auto-merging .zshenv
Auto-merging .vimrc
Auto-merging .gitconfig
CONFLICT (content): Merge conflict in .gitconfig
fatal: bad config file line 23 in /home/uda/.gitconfig

conflict したのがよりもによって .gitconfig だったため、git の処理が途中で止まってしまったようです(※私は $HOME/.gitconfig から git-repo/.gitconfig にシンボリックリンクを張って管理していました)。この状態で conflict を解消して commit しようとしても、先述のように merge commit にはなりません。

で、どうしたかというと、merge したときに $HOME/.gitconfig が破壊されないよう別の場所で merge 作業を行うことにしました。 すると、fatal と出ていたところで処理が止まらず、無事 merge commit を作れました。一件落着です。