GitHub/BitBucket でマージコミット地獄を回避する方法 質問する

GitHub/BitBucket でマージコミット地獄を回避する方法 質問する

私たちのリポジトリには、次のようなコミットが多数存在します。

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

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

このマージコミット地獄がリポジトリログ全体を乱雑にすることを回避する方法はありますか? プルリクエストを開始するときに、何らかの方法でこれを回避できますか?

ローカル VM でのみ git rebase を実行できることはわかっていますが、GitHub/BitBucket UI に同等の機能はありますか?

皆さんはどうやってやるんですか?

ベストアンサー1

マージ前に機能ブランチをリベースする

マージコミットを避けたい場合は、すべてのコミットが 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高速フォワードコミットのみが許可されます。マージコミットの場合はコミットは行われません。git-merge(1) のマニュアルページには次のように書かれています:

--ffのみ

現在の HEAD がすでに最新であるか、マージが fast-forward として解決できる場合を除き、マージを拒否し、ゼロ以外のステータスで終了します。

おすすめ記事