次の状況を考慮してください。
- Gitリポジトリのクローンがあります
- ローカルコミット(まだどこにもプッシュされていないコミット)がある
- リモートリポジトリには、まだ調整されていない新しいコミットがあります
このようなもの:
git pull
デフォルト設定で実行すると、次のようなものが得られます。
これは、gitがマージを実行したためです。
ただし、代替手段があります。代わりにリベースを行うようにpullに指示できます:
git pull --rebase
これが得られます:
私の意見では、リベース版には多くの利点があり、それらは主にコードと履歴の両方をきれいに保つことに集中しているため、gitがデフォルトでマージを行うという事実に少し驚いています。はい、ローカルコミットのハッシュは変更されますが、これは、より単純な履歴の見返りとして支払う小さな代償のようです。
しかし、これが何らかの形で悪いまたは間違ったデフォルトであることを決して示唆しているわけではありません。デフォルトではマージが優先される理由を考えるのに苦労しています。なぜ選ばれたのかについての洞察はありますか?デフォルトとしてより適切にする利点はありますか?
この質問の主な動機は、私の会社がリポジトリを整理および管理する方法についてのいくつかのベースライン標準(できればガイドラインに似ている)を確立しようとしていることです。私は通常、このタイプの状況でリベースする必要があるというケースを作成することに興味があります(そしておそらく開発者がデフォルトでリベースするようにグローバル構成を設定することを推奨するため)とても素晴らしい場合はデフォルトです。だから私は私が不足している何かがあるのだろうかと思っています。
この質問は、なぜ多くのウェブサイトが「git merge」よりも「git rebase」を好むのかを複製したものであることが示唆されています。; ただし、この質問はこの質問の逆です。この質問では、リベースよりもマージの利点について質問されていますが、マージよりもリベースのメリットについて説明します。そこでの答えはこれを反映しており、マージの問題とリベースの利点に焦点を当てています。