4

マスターの最新のコミットにリベースしたいブランチがあります。問題は、マスターに介在するコミットの1つが、特定のファイルのセットを削除して無視することでした(この質問を参照)。

ストレートリベースを実行すると、それらのファイルは再び削除されます。すべてのファイルを手動でコピーしてから、後で再度コピーするのではなく、gitでこれを行う方法はありますか?

または、マスターから新しいブランチを作成してから、古いブランチからのコミットだけをマージするようなことをする必要がありますか?

アスキーアートの試み:

master    branch
  |        w  work in progress on branch
  C        |  committed further changes on master
  |        |
  B        /  committed delete/ignore files on master
  |       2  committed changes on branch
  |      /  
  A     /  committed changes on master which I now need to get branch working
  |    1  committed changes on branch
  0___/  created branch

(アートをやっていると、Aからブランチをリベースし、終了したらマージできることに気付きましたが、これを「適切に」行う方法があるかどうかを知りたいです)

これを試みている人への警告を更新します。ここで提案する解決策は問題ありませんが、マスターを再度チェックアウトすると、Bコミットが再適用され、すべてのファイルが再び失われます:(

4

1 に答える 1

2

あなたのコメントから、 Bを除いてマスターの上にdevブランチをリベースする必要があると
思います。あるブランチで削除したファイルが別のブランチで削除されるのを見たくありません。

考えられる解決策の1つは次のとおりです。

  • rebase --interactiveコミット順序を書き換えるマスター(可能な場合)
    0--A--C'--B'マスター
     \
      --1--2--w dev
  • C'の上にdevブランチをリベースします(Bを除くすべてのマスターコミットを表します)
    0--A--C'--B'マスター
           \
            --1'--2'--w'dev

つまり、マスターを別のリポジトリにまだプッシュしていないことを意味します(そうでない場合は、自分のリポジトリ/マスターブランチでマスターをプルしたい人にとってはマージの悪夢が伴います)

于 2010-03-19T11:33:24.563 に答える