私たちのリポジトリには、次のようなコミットが多数存在します。
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 として解決できる場合を除き、マージを拒否し、ゼロ以外のステータスで終了します。