1. ホーム
  2. git

[解決済み] GitHub/BitBucketでマージコミット地獄を回避する方法

2022-10-14 03:06:43

質問

私たちのレポには、このようなコミットがたくさんあります。

Merge branch 'master' of bitbucket.org:user/repo

これは開発者が自分のローカルフォークをトップレベルレポに同期するたびに発生します。

このマージコミット地獄がすべてのリポジトリログを乱雑にするのを避ける方法はありますか?何らかの方法で pull-requests を開始するときに、それらを避けることができますか?

git rebase がローカルの VM 上だけで実行される場合、GitHub/BitBucket の UI に同等のものがあるのでしょうか?

皆さんはどのようにされていますか?

どのように解決するのですか?

マージする前にフィーチャーブランチをリベースする

マージコミットを避けたい場合は、すべてのコミットが fast-forward であることを確認する必要があります。そのためには、このようにマージする前に機能ブランチを開発ラインにきれいにリベースするようにします。

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

Rebase には多くのフラグがあり、対話的なリベースも可能です。 -i フラグもありますが、できるだけシンプルに、かつマージ時にすべてのブランチ履歴を保存したい場合は必要ないかもしれません。

を使用します。 --ff-only フラグ

リベースとは別に --ff-only フラグを使用すると、fast-forward コミットのみが許可されるようになります。代わりにマージコミットが行われる場合は、コミットは行われません。git-merge(1) のマニュアルページには、次のように書かれています。

--ff-only

マージすることを拒否し、ゼロ以外のステータスで終了します。 HEADがすでに最新であるか、マージが早送りとして解決されるのでなければ として解決できる場合を除き、マージと終了をゼロ以外のステータスで拒否します。