1 つの課題に対して 1 つのコミットを行うことは、良い習慣であると心から信じています。「ベスト プラクティス」などの記事のどこかで読んだはずです。
そのため、私のワークフローは次のとおりです。
- 新しい問題については、新しいローカル ブランチを作成し
git checkout -b new-issue
ます。 - すべての変更をそれにコミットします。これには、多くのコミットが含まれることがあります。
- 完了したら
squash
、コミットし、rebase
それらを現在のテーマ別ブランチに入れます。 - 何か問題が発生した場合は
git revert
、コミットしてバグを見つけて修正し、新しいパッチをテーマ ブランチにコミットできます。リモート リポジトリの履歴は変更しません。
しかし、今日、次のワークフローを聞いて驚きました。
- 新しい問題の新しいブランチを作成します。
- それにすべてをコミットします。
- 課題ブランチをテーマ ブランチとマージするために使用
merge --no-ff
します (そのため、「マージ コミット」が可能になりますrevert
)。 - 何か問題が発生した場合は
git bisect
、バグを見つけるために使用できます。
最初のアプローチによると、クリーンな git 履歴があり、開発中に使用されるオーバーヘッド ブランチについてはわかりません。
2 番目のアプローチによれば、非常に厄介な履歴が残り、たった 1 つの課題に対して多くの醜く不必要なマージとコミットが行われます。ただし、git bisect
バグを見つけるために使用できます。(おそらく、これはリファクタリングに適していますか?)
両方のアプローチについて、どのような長所と短所がありますか?
どのアプローチを使用し、その理由は何ですか?
実際に、実際に
git bisect
バグを見つけることに慣れていますか? (私はそうではありません…)