14

いくつかの機能ブランチとマスターブランチがあります。Feature2が完了しました。通常、私はリベース(リモートSVNリポジトリを使用しており、履歴を保持したいので、定期的なマージは行いません)してff-mergeします。Eしかし、分岐してからマスターが変わっていないので、マスターヘッド(at )をに移動したいと思いGます。を使用git branch -f master Gしても目に見える変化はありません。これはG別のブランチにあるためだと思います。

git update-ref -f master G代わりにここで使用しても安全ですか?rebase / ff-mergeを使用する必要がありますか?さらに良いものはありますか?

feature1      C-D  
             /
master    A-B-E            
               \                      
feature2        F-G  

ありがとうございました。

4

5 に答える 5

14

ブランチをマージする必要はありません。リセットするだけで十分です。マスターがチェックアウトされていると仮定します。

git reset --hard feature2
于 2012-05-25T13:07:27.270 に答える
11

マージは必要ありません。ブランチの名前を変更するだけです。feature2(「完了」)も既存のマスター(「E」)も気にしないので、次のものが必要です。

git branch -d master
git branch -m feature2 master

シンプルな方がいいですか?

関連する2つの重要な概念があることを忘れないでください。

  1. Gitコミットグラフ、および
  2. Gitリファレンス

(さまざまなフレーバーの、リベースを含む)マージを実行すると、コミットグラフが変更されます。変更には、ノードの追加、リンクの追加、またはリンクの移動が含まれます。参照(ブランチとタグを含む)はコミットを指すだけなので、参照を変更すると、グラフの構造ではなく、コミットを指すだけが変更されます。

したがって、あなたの場合、構造を変更する必要はなく、参照を変更するだけです。

1行のバージョンは次のとおりです。

git branch -f master feature2

これにより、feature2の分岐が維持されます(feature2を軸にする以前の2ライナーとは異なります)。

于 2012-05-25T14:37:17.410 に答える
10

Gをマスターに定期的にマージすると、リベースする必要がなく、うまくいきます。

    feature1      C-D  
                 /
    master    A-B-E            
                   \                      
    feature2        F-G

git checkout master
git merge feature2

    feature1              C-D  
                         /
    master, feature2  A-B-E-F-G
于 2012-05-25T22:29:16.030 に答える
1

update-refは安全です。ブランチヘッドは、ほんの少しの「読んでください」にすぎません。タグがコミットでハングしました。gitがそれを取得し、時々別のコミットでハングさせるのは、純粋に慣例によるものです。

git branch -f master Gを使用しても、目に見える変化はありません

何てgit log --decorate --oneline --all言うの? git show master

于 2012-05-25T13:07:37.690 に答える
0

git merge --no-ff feature2マスターブランチにチェックアウトした場合は、を使用して、機能2のマスターへの非早送りマージを実行するのが最適な場合があります。あなたは次のようになるはずです

feature1      C-D  
             /
master    A-B-E-----H          
               \   /                   
feature2        F-G 
于 2012-05-25T11:23:18.987 に答える