3


1

同じファイルと外部で変更されたファイルのGitマージ

開発者から(zipファイルから)いくつかのコードを継承し、gitで初期化、変更、チェックインの設定を段階的に行いました。

現在、同じ開発者が変更を加えた同じコードをリリースし、別のzipファイルを提供してくれました。

gitリポジトリにある変更と、2番目のzipファイルの内容からの最近の変更をマージするにはどうすればよいですか?

理想的には、自分の変更と開発者の最近の変更の両方を蓄積するコードが必要です。

マスターブランチからブランチb1を作成し、その上に2番目のzipファイルの内容を適用しようとしました。 ブランチでこれらのファイルをコミットし、「git checkout master; git merge b1 '-しかし、私は自分の変更を取得せず、マスターブランチでの彼の変更のみを取得します。

2 Answer


5


あなたと他の人の両方が、リポジトリのルートコミットとして持っているコードに基づいて作業しているように思えます。 だから今、あなたはこれを持っています:

A - B - C - D (master)

他の開発者の作業も、コミット「A」に基づいています。 したがって、それをコミットする適切な場所は「A」から外れています。

そこでブランチを作成してチェックアウトすることから始めます: git checkout -b his_work(またはgitkで、コミットを右クリックしてブランチの作成を選択します)。

次に、彼の作品をダンプし、コミットします。 良いことには、これを `git commit --author =" His Name "`で実行して、それが彼の仕事であることを示すことができます。

マスターをチェックアウトし( git checkout master)、ブランチをマージします(` git merge his_work`)。

これで終わるはずです:

A - B - C - D - E (master)
 \             /
  X -----------
  (his_work)

説明のためだけに、次のことを行います。

A - B - C - D      -      X (his_work)
         (master) ---->

あなたは最新のものの上に彼の仕事をコミットし、それをマージしました。マージは早送りでした。マスターはマージしたブランチの祖先であったため、マスターをその新しいコミットに単純に進めました。


1


あなたが彼の変更だけを得たのは、あなたのブランチがあなたの最新のコミットに基づいているからです。 次に、すべてのファイルを彼と置き換え、コミットしました。 Gitは、これをマージではなく、自分のファイルで置き換える大規模な編集と見なしています。

あなたが望むものを手に入れるには、変更があなたのものから分かれているところから分岐する必要があります。 それがあなたの最初のコミットのようです。 だからあなたはできる:

git checkout
git checkout -b b1        // This just names the branch for the later merge

git checkout master
git merge b1

ここから、gitはb1が最初のコミットに基づいていることを確認するため、それ以降のmasterからのすべての変更を「同時」変更として表示します。