git rebase
「この履歴を書き換えて、リベース後の HEAD の内容が現在と同じままになるようにすべての競合を自動的に解決する」という簡単なオプションはありますか?
機能ブランチがあり、マスターにマージしました。基本的に、マスターへのリベースとしてそれをやり直したいと思います。
-X ours
その選択肢かもしれないと思ったのですが、結果は違う内容でした。
git rebase
「この履歴を書き換えて、リベース後の HEAD の内容が現在と同じままになるようにすべての競合を自動的に解決する」という簡単なオプションはありますか?
機能ブランチがあり、マスターにマージしました。基本的に、マスターへのリベースとしてそれをやり直したいと思います。
-X ours
その選択肢かもしれないと思ったのですが、結果は違う内容でした。
私が理解しているように、あなたが望んでいるのは正確にはマージやリベースではありません。もっとカットオーバーです。すでに master をフィーチャーにマージしているため、結果のツリーをどのようにしたいかがわかります。
git 用語で言えば、これは、新しいコミットでフィーチャー ブランチのヘッドと同じツリーを使用することを意味します。フィーチャー ブランチの名前が my-feature であると仮定すると、そのコミットのツリー ルートに直接アドレス指定できますmy-feature^{tree}
。
親がマスターであり、ツリーがリポジトリに既に存在するものを再利用する新しいコミットが必要です。配管コマンドをgit commit-tree
使用すると、この細かいレベルの制御を行うことができます。
$ git チェックアウト マスター $ git merge --ff-only \ $(git commit-tree my-feature^{tree} -p $(git rev-parse master) -m FIXME) $ git commit --amend -C $(git rev-parse my-feature)
の出力はgit commit-tree
、新しいコミットの SHA1 です。このgit merge
コマンドはその SHA1 をキャプチャし、それをローカル マスターにマージします。フェイルセーフの--ff-only
ようなものであり、私たちの意図を表現するためにあります。新しいコミットは、 master を親として名前付けするため、構成によって早送りになります-p
。
上記の場合、機能ブランチの先頭である別のコミットからのコミット メッセージを再利用できるようにする-C
オプション。git commit