2016-05-06 8 views
1

は、私はL1、L2、およびL3は私のローカルブランチにコミットしているとMがマージされGit:ローカルのマージされたブランチでコミットがリモートにプッシュされるのですか?

  L1 - L2 - L3 <- Local branch 
     /   \ 
A - B - C -- D -- E -- M <- master 

次Gitの歴史を持っていると仮定し、マスターにコミット。

変更をリモートにプッシュすると、ローカルブランチ内のコミットが履歴の一部になるかどうかを確認します。つまり、リモートリポジトリの履歴は上記のグラフのようになりますか

A - B - C - D - E - M <- master 

また、早送りマージの場合はどうなりますか?

答えて

1

マージコミットには2つの親コミットがあります。ローカルブランチのコミットを履歴から切り取ることはできません。 MはL3なしでは存在できず、L3はL2なしで存在することはできません。この完全性はGitの基本です。したがって、押し込まれたmasterブランチは、必ず「グラフのように見える」でしょう。ローカルブランチ上のコミットは、薄い空気に消えません。

早送りマージでは、特別なことは起こりません。履歴は線形です。実際にはマージではなく、実際には「早送り」です。あなたの例で は、何のDとEのコミットがないと仮定し、ローカルブランチをマージし、その後の歴史は次のようになります。何Mのいずれかが存在しないことを

A - B - C - L1 - L2 - L3 <- master 

はお知らせ(何のマージコミットしません)。

+0

ありがとうございました。完全性のために、ブランチ全体を1つのコミットにまとめたい場合は、 'git merge --squash'が行く方法です。[こちら](http://stackoverflow.com/a/5309051/4920424) )。 –

関連する問題