113

私たちのレポでは、次のような多くのコミットが発生しています。

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

これは、開発者が自分のローカル フォークを最上位レポに同期するたびに発生します。

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

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

皆さんはどのようにしますか?

4

2 に答える 2

160

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

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

git checkout master
git checkout -b feature/foo

# make some commits

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

リベースには、フラグを使用したインタラクティブなリベースなど、多くのフラグもあり-iますが、物事をできるだけシンプルに保ち、マージ時にすべてのブランチ履歴を保持したい場合は、必要ないかもしれません。

--ff-only旗を使う

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

--ff-のみ

現在の HEAD がすでに最新であるか、早送りでマージを解決できる場合を除き、マージを拒否し、0 以外のステータスで終了します。

于 2013-05-03T12:14:09.643 に答える
15

"Todd A. Jacobs" が既に述べた "rebase" がここでのコンセプトです。これは、物事を行うためのより詳細な方法です。

あなたがマスターブランチにいるとしましょう

$ git branch
  * master

修正したいので、マスターから分岐した「fixbranch」を作成する

$ git checkout -b fixbranch

たぶん、あなたはこのブランチで数日間働き、数回コミットしたでしょう。

コミットを中央のマスター リポジトリにプッシュしたいと思った日です。マスターをチェックアウトし、中央のマスター リポジトリから最新の変更を取得します

$ git checkout master
$ git pull origin master

fixbranch を master にリベースして履歴を消去し、ローカル リポジトリ自体に競合があれば解決します。

$ git checkout fixbranch
$ git rebase master

これで fixbranch が中央の master に更新されました。fixbranch を master ブランチにマージさせてください

 $ git checkout master
 $ git merge fixbranch

私はこれで終わりです!ローカル マスターをセントラル マスターにプッシュさせてください

$ git push origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

于 2018-10-18T08:44:16.930 に答える