簡易版でコミットを削除するにはgitのフィルタ分岐を使用した:私はブランチ「FOO-555」を持っている場合のようなメッセージとコミットの束と、彼らのメッセージをコミット
:
- FOO 555:何とか
- FOO 123:何とか何とか
- FOO 555:何とか何とか何とか
- FOO 321:blahblah
"foo 555:"で始まらないコミットをすべて削除したいのですが、git filter-branch(またはその他のツール)を使用する方法はありますか?
オリジナルバージョン(より詳細な):
私たちのリポジトリにRedmineの#555::SOME_MESSAGE
我々は、すべてのメッセージが一定のパターンで始まるコミット規則を持っています
また、特定の問題のブランチに潜在的なリリースブランチの変更を反映させるために少しリベースします。つまり、私はブランチ "foo-555"を持っているかもしれませんが、 "pre-release"ブランチにマージする前に、プレリリースでfoo-555がないというコミットを得る必要があります(foo- 555は、早送りしてプレリリースにマージすることができます)。
しかし、プレリリースが時々変更されるため、プレリリースからコミットを取り込む状況が発生することがありますが、そのコミットは後にプレリリースから削除されます。プレリリースから来たコミットは、コミットメッセージの番号がブランチ番号と一致しないため、簡単に識別できます。例えば、私がfoo-555ブランチで "Redmine#123:..."を見ると、私はブランチではないことを知っています。
ここで質問します。「ブランチに属していない」コミットをすべて削除したいと思います。
- は私のfoo-555支店にされていますが、いないプレリリースブランチで(前release..foo-555)
- 「doesnのコミットメッセージを持っている:他の言葉では、いずれかのことをコミット"Redmine#555"から始まります。
もちろん、 "555"はブランチによって異なります。これを達成するためにfilter-branch(または他のツール)を使用する方法はありますか?現在私が見ることができる唯一の方法は、対話型のrebase( "git rebase -i")を実行して、すべての "悪い"コミットを手動で削除することです。
あなたは桜、関連するブランチにしたいコミットを選ぶことができませんか? –
私たちは*できますが、10 555のコミットと10の他のコミットがあるとしましょう。私はリセットして、10個のチェリーピックをしなければならないでしょう(もしそうなら、1つのフィルターブランチコマンドに対して)。 – machineghost