2017-11-17 3 views
0

Gitで競合が解決された直後に定期的にコミットする必要があるのはなぜですか?Gitで競合が解決された直後に定期的にコミットする必要があるのはなぜですか?

競合が解決された後に他のファイルを変更したら、それらを一緒にコミットしますか?

違いは何ですか?

+1

あなたが求めていることは100%わかりません。 Gitにあなたが矛盾を解決したことを伝えるコマンドが、普通の片親コミットを行うのと同じ 'git commit'ではなく、' git resolved'のような別の名前を持たないのはなぜですか? –

答えて

3

「違い」はありません。

マージが1つ以上のコンフリクトで終了した場合、可能な限りマージしてから停止し、これらのコンフリクトについて通知します。

これらの競合を解決したら、最終的なマージコミットをコミットすることがあなたの仕事です。

これは、他のgitコマンドや外部の競合解決ツールを呼び出すことで手作業でマージ競合解決のステップを実行し、ファイルを手動で視覚的に検査するなどの理由によるものです。これはインタラクティブなプロセスではないため、通常どおりにコミットする前に、競合の解決を完了するまで待っています。それは単に「私はここで止まり、あなたが終わったときにコミットします」と言っています。

これらの競合を解決するだけでなく、ディスク上のファイルをさらに変更してそれらの変更を追加してからコミットすると、すべてがコミットされます。これについて特別なことは何もありません。

マージコミットは、他の通常のコミットと似ていますが、(通常は)1つではなく2つの親を持ちますが、それ以外のすべてのベルとホイッスルで完全に正規のコミットです。コミットが導入したすべての変更を準備したgitによって実行されたマージ操作であるという事実はちょうど詳細なので、適切な変更をステージングし、gitに2つの親とコミットするように手作業で自分自身を100%コミットすることができます。

このように、ファイルをさらに変更するのと比べて、これを行わないのは、マージに多くの変更が含まれ、対立解決が追加されたgit +だけです。

これ以上のものはありません。

+0

ここにコメントすることは申し訳ありませんが、コメントにあなたの名前をタグ付けする方法は不明です。私の質問とそれに関連する答えは、Deserealize部分の修正方法については言及していません。 –

0

マージの最後のステップが(通常は裏目の)コミットであり、競合が発生したときにgitの葉が脱出するため、コミットする必要があります。したがって、このような状況で新しいコマンドやサブコマンドを作成するのではなく、インデックスを整理してから最後のステップを完了させることにしました。

お客様は、競合解決以外の変更を行います。時にはこれが適切に競合を解決するために必要です。 gitは、変更が本当に紛争解決に必要なのかどうかを "知る"ことはできません。 は、コンフリクトマーカー内にない変更を検出して警告を出すことができますが、いくつかのコンフリクトシナリオでは正当な解決が妨げられ、警告に関わる余計な努力をする価値はないようです。だから代わりに、開発者は彼らが何をすべきかをすることが信頼されています。

はまた、あなたがそれをコミットする前に(何の競合がなかったにもかかわらず)マージ結果を編集できるように、特に gitのマージをコミットしないように伝えることができることをご存知でしたか?あなたはたぶんそうではありませんが、そうすることができます。

マージで実際の競合解決ではない変更を行うと、マージコミットでこれらの変更が多少「隠されている」ため、それらの変更を探す必要があることに注意してください。

しかし、gitは強力なツールです。一般的に、gitはそのパワーの使い方を知っていることが期待されます。あなたが望む親とコミットするコンテンツをコミットする能力は、その力の一部です。

関連する問題