Help us understand the problem. What is going on with this article?

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 を作れました。一件落着です。

t_uda
主に JavaScript-er です。HTML5 力が足りていない。数学方面でよく C++ も書いていますがあまり詳しくないです。誰か私に RAII について教えてください。 Twitter とは距離を置いてそろそろ Qiita 活用してプログラミング生活にうちこみたいそんな今日この頃。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away