私は、github でホストしているレポで別の人と作業しています。私または彼がプルするたびに、git はマージ コミットを強制します (vim はコミットの説明で開きます)。
追加のマージコミットなしで、新しいコミットを追加するだけではいけませんか?
git の履歴をグラフと考えてください。同僚とあなたの両方が、コミット A に基づく新しいコミットを作成しています。あなたを B、彼を C としましょう。履歴は次のようになります。
B C
\ /
\ /
A
それを元に戻すには2つの方法があります。1つはマージしています:
M
/ \
/ \
B C
\ /
\ /
A
もう 1 つはリベースです (例: 経由git pull --rebase
)。次の例では、リベースするのはあなたです。
B -- C -- A
どちらにも長所と短所があります。原則として、コミットをまだプッシュ (または他の方法で共有) していない場合、つまり B を持っているのはあなただけです。そうでない場合、リベースは非常に大きな問題を引き起こします。厄介な問題であり、マージしたほうがよいでしょう。
各コミットはツリー全体の状態を記録するため、異なるブランチが同じファイルを変更していない場合でも、マージを行う必要があります。
この状況では、テキストの競合がないことが保証されているため、git は常に異なるブランチからの変更を自動的にマージできますが、意味上の競合がないことは保証されません。たとえば、あるブランチがライブラリ内のメソッドを変更して追加のパラメーターを要求し、他のブランチがそのメソッドに新しい呼び出しを導入することができます。マージは競合を報告しませんが、結果のコードは追加の変更なしでは機能しません。明示的なマージ コミットを誰かに要求すると、動作しないコミットが行われる前に、そのような競合が発見される可能性が生じます。実際には、マージを行うたびにこのタイプの競合をチェックする人はほとんどいません。