リポジトリでこのような多くのコミットが行われています:
Merge branch 'master' of bitbucket.org:user/repo
これは、開発者がローカルフォークをトップレベルリポジトリに同期するたびに発生します。
とにかく、このマージコミット地獄がすべてのレポログを乱雑にするのを避けるためにありますか?何らかの方法でプルリクエストを開始するときにそれらを回避できますか?
ローカルでVMのみ、GitHub/BitBucket UIに同等のものがあれば、git rebaseを実行できます。
どうやってやるの?
マージコミットを回避する場合は、すべてのコミットが早送りであることを確認する必要があります。これを行うには、次のようにマージの前に、機能ブランチが開発ライン上でクリーンにリベースされるようにします
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-only
現在のHEADが既に最新であるか、マージが早送りとして解決できる場合を除き、ゼロ以外のステータスでマージおよび終了を拒否します。
既に述べた「Todd A. Jacobs」は「リベース」という概念です。これは、より詳細な方法です。
あなたがマスターブランチにいるとしましょう
$ git branch
* master
修正したいので、マスターから分岐する「fixbranch」を作成します
$ git checkout -b fixbranch
たぶん、あなたはこのブランチで数日間働いていて、2、3のコミットを持っていたでしょう。
コミットを中央マスターリポジトリにプッシュしたい日!マスターをチェックアウトし、中央マスターリポジトリから最新の変更を取得します
$ git checkout master
$ git pull Origin master
マスターを使用してフィックスブランチをリベースし、クリーンな履歴を保持し、ローカルリポジトリ自体に競合がある場合は競合を解決します。
$ git checkout fixbranch
$ git rebase master
これで、fixbranchは中央マスターで最新になりました。fixbranchをmasterブランチにマージします。
$ git checkout master
$ git merge fixbranch
私はこれで終わりです!ローカルマスターを中央マスターにプッシュさせます
$ git Push Origin master