0

Git を使用して次のことを達成する方法についてアドバイスを求めています。

ブランチ: マスター (安定ブランチ) 不安定

すべての作業は不安定なブランチで行われ、コードはいつでも機能しない可能性がありますが、進行状況を保存するためにプッシュします。安定点に到達したら、マスターを不安定とまったく同じにしたいと考えています。不安定なブランチの状態をマージして選択するときにすべての変更を行う必要はありません。不安定なブランチの状態を使用して、マスターをまったく同じにしたいだけです。一部のファイルの削除、一部のファイルの追加、一部のファイルの変更が必要になる場合があります。すべてのコミットを不安定版からマスターにコピーしたくはありませんが、すべての変更を含む新しいコミットを 1 つ追加するだけです。

これを成功させるために私が見た唯一の2つの方法は次のとおりです

git checkout master
git reset --hard unstable

しかし、これはすべてのコミットを不安定版にコピーしているようで、マスターをリモートにプッシュできません (リモートによって拒否されました) または

git checkout master
rm -rf ./*

次に、他のブランチからすべてのファイルをコピーしてコミットします。

これを行うためのより良い方法、またはまったく異なるアプローチがあるに違いありませんか?

4

3 に答える 3

4

masterで開発している間は変わらないようですunstable。最終的なツリーの外観に応じて、2つのオプションがあります。

このツリーから始めたとしましょう:

A---B         (master)
     \
      C---D   (unstable)

(単一のトランクで、同じコミットを指す)masterに単純に早送りしたい場合:unstablemasterunstable

git checkout master
git rebase unstable

結果のツリー:

A---B---C---D  (master, unstable)

マージコミットが必要な場合(unstable分岐してからマージして戻るmaster):

git checkout master
git merge --no-ff unstable

結果のツリー:

A---B-------D'  (master)
     \     /
      C---D     (unstable)

更新@KurzedMetalは親切にも指摘してくれたので、これらのオプションはどちらも必要ありません。彼の答えは正しいと思います。後のツリーは次のgit merge --squash unstable master; git commitようになります。

A---B---------E  (master)
     \
      C---D      (unstable)

masterとの関係がないことに注意してくださいunstable。この後、次のコマンドでリセットすることをお勧めしますunstable

git checkout unstable
git reset --hard master

その結果:

A---B---E       (master, unstable)

ただし、なぜこの戦略を使用するのかわかりません。その歴史をすべて失うことは私には賢明ではないようです。

于 2012-04-12T16:18:19.547 に答える
4
git checkout master
git merge --squash unstable
git commit

最後のマージ以降に行われたすべての変更 (unstable ブランチでのコミット) を 1 つのコミットにします。

于 2012-04-12T16:07:57.540 に答える
0

git checkout master

git merge unstable

その後、マージコミットが行われ、マスターの状態は不安定なブランチとまったく同じになります。

マージが壊れたと思ったら、1 つのコミット (マージ コミット) をフォールバックするだけで、元の状態に戻ります。子供のもの:)

于 2012-04-12T15:56:04.877 に答える