2016-10-04 25 views
2

gitのマージに関する質問があります。私のリポジトリにローカルとリモートの2つのブランチがあるとしましょう:マスターとテスト。私がテストブランチで作業している間、マスターブランチは他の人によって更新されました。Gitのマージ - マージされたブランチはどうなりますか?

git checkout master 
git pull origin master 

そして、これは最近追加されたものを右に私のmasterブランチを更新:ターミナルでは、私が書くのか?それから、テストブランチでやっていたことを終わらせます。
私がターミナルに行くと書いた場合:

git checkout master 
git merge test 
git push origin master 

これは私のmasterブランチに私のテストブランチをマージして、githubの右への変更をプッシュ(のは競合がないと仮定しましょうか)?私の質問は、テストブランチはどうなりますか?それはマージの前と同じ方法をとっていますか?あるいは、テストブランチとマスターブランチの両方が同じになるのでしょうか?テストブランチを更新するために今これを行う必要がありますか?

git checkout test 
git pull origin master 
git push origin test 

ありがとうございます。私はターミナルに行くと書けば

+2

masterをテストにマージしない限り、同じままです。 'git checkout test'' git merge master' ... – n00dl3

+0

@ n00dl3テストをマスターにマージするときに競合が発生すると、テストに新しいマスター? – Tirafesi

答えて

4

git checkout master 
git merge test 
git push origin master 

これは私のmasterブランチに私のテストブランチをマージして、githubの右への変更をプッシュ(のは競合がないと仮定しましょうか)?私の質問は、テストブランチはどうなりますか?

何もありません。

ブランチの名前は単なるコミットの名前であることに注意してください。その親に「バックポイント」各コミット

...--o--o--o--o  <-- master 
     \  
      o--o--o <-- test 

:それらを描画するには、私たちは、特定のコミットについて話をする必要があるときにそれらを結ぶ線と、oノード、または大文字の単一文字のラウンドとしてコミット自体を描くのが好きコミットので、我々はこれらの各文字の名前をコミット与え、そしてすべての中間の矢印で描画した場合、我々が得る:

...<-A<-B<-C<-D  <-- master 
     \ 
      E<-F<-G <-- test 

支店名、mastertest、実際のチップの生のハッシュIDが含ま2つの枝。つまり、ファイル.git/refs/heads/master を調べると、醜い40文字のハッシュのうちの1つ、a139fc7...などが見つかります。

masterDをコミットし、testGを示します。コミットDはコミットCに戻ります。これはBに戻ります。 GポイントをFに返すとEに戻ります。これはBを指しています(いくつかの良い矢印描画フォントは一部のマシンでしか動作しないため、ここにプレーンテキストの矢印を描くのは難しいことです)。

新しいをコミットすると、Gitのコミット方法は、新しいコミットを現在のブランチチップに設定してから、新しいコミットをリポジトリ内に安全に置いて、ブランチの名前ファイルを新しいコミットのIDで書き換えます。これにより、ブランチ名は新しいtipを指し示します。新しいIDはどこにもないので、以外のブランチの名前は変更されません。 testはまったく移動しますが、masterあり、そして新しいマージコミットしていないことを

...--o--o--o--o---o <-- master 
     \  /
      o--o--o <-- test 

注:

マージがそうするとき、あなたgit merge test、それは動作しますが、あなたがこれを取得、2人の親を持つコミット2つの異なる以前のコミットを指します。つまり、古い分岐先はmaster、最後には(変更されていない)先端はtestです。


このファイルは2.10を通じて、今日のGitのバージョンでは、今、将来的に存在する、またはこの場所にとどまるか、この形式を持っていますが、になるという約束はありません、あなたは一般的にそのファイルを持っています。

+0

この場合、最良の方法は何でしょうか?ブランチテストを削除して、新しいテストを作成しますか?また、マスターの変更をテストにも引き継ぐことができますか? – Tirafesi

+0

それは、あなたが何をしたいのか(あるいは何をしているのか、それとも何もしていないのか) 'test'によって決まります。 'test'という名前がリモートにない場合(あなたがそれを絶対にプッシュして最初から取得しないので、他の人と調整するために使用する' origin/test'はありません) 、その決定はまったくあなたのものです。それ以外の場合は、他のユーザーと交渉して、皆が好むものを見つけることができます。 – torek

関連する問題