2016-10-07 6 views
0

この質問は、他のチームメイトと一緒にGitを使用している場合に適用されます。我々は両方が同じファイルを変更しているが、矛盾を引き起こすような方法ではないと言うことができる。マージ、チェリーピック、またはパーツだけが変更されたとき、Gitはファイル全体をオーバーライドしますか?

私は、コードを持っているとしましょう:私はclient_viewを変更するように要求と関連してい

#define client_view 500 
#define server_view 1000 
#define client_destroy 750 
#define server_destroy 1250 

、私の同僚はserver_viewを変更することが求められます。

私は、例えば、570client_viewそれを変更私はこの仮想シナリオでは570が良いと思います。同様に、私の同僚はserver_viewについて1066を選択します。

我々の両方が要求を引っ張って、管理者はマスターにこれらをマージし、

それは何が表示されますか?

#define client_view 570 
#define server_view 1000 
#define client_destroy 750 
#define server_destroy 1250 

または

#define client_view 500 
#define server_view 1066 
#define client_destroy 750 
#define server_destroy 1250 

または

#define client_view 570 
#define server_view 1066 
#define client_destroy 750 
#define server_destroy 1250 

私は私の変更は私の同僚の変更を上書きするかどうかを知りたいので、私はこれを頼みます。私は他の誰かが働いていたのと同じファイルでプルリクエストを送信したことがないので、その答えを知らず、SOなどで見つけられませんでした。

答えて

0

「3ウェイマージ」と呼ばれることをしています。

  • A:これは意味し、関係する3つのコミットがあるでしょう彼らの
  • Cコミット:Aの共通の祖先をし、B

3-way-あなた

  • Bをコミット今すぐマージすると(基本的に)CAとCBの間のすべての変更が検出されます。ラインの特定のセットがAまたはBのいずれかによってのみ変更された場合は、それが適用されます。 AとBの両方で(Cに対して)変更された行は、競合とみなされ、手動で解決を選択する必要があります。

    Gitリポジトリに使用されるアルゴリズムは、一般的に、あなたが直感的に期待する何を与えることで、非常に、非常に良いです。したがって、あなたのケースでは、両方の変更が単純に適用されます(相互に矛盾しないため)。だから、あなたは3番目の結果を得ます。 Incidently

    、多くの場合、人々を混乱させる事は、GitはC ... AまたはC ... Bわたってるしき起こるものは何でもについて少し気にしていないということです。たとえば、間にあるファイルを削除して復元することはできますが、マージ操作にはまったく影響しません。

    また、ではないどうにかしてすべての中間のコミットを通過しますが、これらの3つのコミットだけが表示されます。(同僚の一つはファイル全体に大きな葛藤をレンダリング、すべての行のインデントを変更した場合、たとえば、)マージ競合の極端な場合には、あなたが何らかの形でAまたはB上を変更することによって、自分自身を助けることができるので、これは、今まで非常に便利です自分自身(この例では、彼らのインデントを元に戻す、またはあなたファイルに同じインデントを適用)、その変更をコミットし、が、その後がうまくいけば、より少ない衝突を取得し、再びマージしてみてください。

  • 関連する問題