1

これは私が持っているものです:

o experiments
|
o
|
o
|
o master
|
o
|
o (initial commit)

ご覧のとおり、最初の 3 つのコミットは "master" ブランチで作業していました。次に、別の方向に進むために、新しいブランチ「実験」を作成しました。

今、私はこの状況に直面しています:

  1. 私は、現在の「実験」の道が本当に進むべき道であると判断しました。
  2. ただし、削除した古い「マスター」からはまだ多くのファイルと、さまざまなファイル内のコードの断片が残っていますが、今すぐ戻したいと思います。
  3. 状況は大きく変わりました。たとえば、作業ツリーのディレクトリ構造が大幅に変更されました。これはおそらく、通常の git マージを行うことは私には向いていないことを意味します。

この状況にどのように対処すればよいですか?1 つのアイデアは、次の質問をすることです。

  • 古い「マスター」を別のディレクトリ (現在の作業ツリーの外) にチェックアウトして、自分で完全に手動でマージできるようにするにはどうすればよいですか?

この最後の質問がこの状況に対処する適切な方法であると思われる場合は、その質問に答えてください。他の方法を提案してください。

4

1 に答える 1

1

図は詳細を隠していません。ええ、私はマスターで個別の開発を行っていません。

その場合、マージは可能な限り単純です。Git は早送りマージを行います。つまり、基本的には、masterブランチ ポインタをブランチと同じコミットに設定するだけexperimentsです。本当に他に何も起こりません。

また、マスターで少し分岐した場合でも、git は両方のブランチの先端を単純に比較するだけでなく、(共通の祖先を見つけることによって) ブランチで何が起こったのかを実際に調べます。これは 3 方向マージとして知られています。したがって、おそらくあなたが何をしたかを理解し、極端なマージ競合に遭遇することはおそらくないでしょう。もちろん、常にいくつかの例外がありますが、マージの競合を解決するときに、それらを簡単に見つけることができるでしょう。

しかし、繰り返しになりますmasterが、まったく分岐していないのでexperiments、最終的に見たい方法でブランチを簡単に準備してから、早送りすることができますmaster。または、マスターから実際に分岐した (または少なくとも計画した) 事実を履歴に反映させたい場合は、 を使用してマージ コミットを強制することもできますgit merge --no-ff experiments

于 2012-11-11T22:19:07.940 に答える