2017-05-18 16 views
0

私の質問は簡単です。 git pullは、元のリポジトリから新しい変更を取得するときに早送りマージを実行しますか?私はドキュメントではデフォルトでそれを読んでいませんが、私は引っ張ってもマージコミットはありません。一例として、git pullとfast forward merging

以下の歴史を持つ元のリポジトリを考えてみます。

A -> B -> C -> D 

そして、私の作業リポジトリは次のようである:

A -> B -> C -> W -> X 

私はリモートから引き抜くとその後、私が手:

A -> B -> C -> W -> X -> D 

Xとの間のマージコミットなし。新しい変更を取り込むときにマージの競合はありません。これは私がgitガイドから理解しているものと一致しません。

+0

あなたの例でDコミットと同じファイルを変更しない限り、競合はないので、変更をリモートブランチのものとマージするだけです –

+0

これは '真のマージ'と '早送りマージ'。 https://www.git-scm.com/docs/git-merge – ElpieKay

答えて

0

git pull --rebaseのいずれかを呼び出すか、デフォルトではpullがリベースするようにローカルリポジトリの設定を変更した場合。

pullを統合して、デフォルトでmerge場合、または設定やパラメータがそうrebaseを伝えることへの分岐のためのfetchをやって最初の組み合わせです。

mergeローカルブランチにのみ存在するコミットがない場合、デフォルトでは早送りマージが行われます。設定またはパラメーター--no-ffによってこれを防ぐことができます。あるいは、早送りマージだけが構成またはパラメーター--ff-onlyによって実行されるように強制できます。早送りマージができない場合、マージが失敗します(つまり、ローカルコミット)。

mergeを使用して記述する動作は、DのヒストリとそのSHA値を変更するrebaseであるため、達成できません。コミッターの名前として、そしてコミッターの日付として完全に新しいコミットであり、Dと同じ変更を導入し、同じ著者名と著者日付を持っています。このような書き換えられたコミットは通常D'と呼ばれます。

+0

しかし、それはプル構成でrebaseさえありません、git pull後にb/cは 'A - > B - > C - > D - > W WとXはローカルであった。おそらく質問を書くことに混乱、ない手がかり。 – hakre

+0

ああ、あなたは正しいです、rebaseはあなたのコミットを上に置くでしょう。それで、あなたが行った正確なコマンドと 'git config -l'の出力を見ることなく、あなたの結果にどのようになったのかを言うのは難しいです。しかし、依然としてマージは、どちらも個々のコミットを持つ2つのブランチから線形履歴を生成できません。 – Vampire

+0

私の結果ではなく、質問のOPの結果について考えるあなたの答えにコメントしていただけです。 :) – hakre