ここにgitリポジトリがあります。 私はbranch.master.rebase = true
とbranch.master.mergeoptions = --no-ff
を設定しているが、私は問題に出くわしています:Git:クリーンな履歴ツリーを維持しようとすると問題が発生する
誰かがマスターに機能ブランチをマージしようとしました。マージは成功し、gitは支店が起点/マスターより30コミットであると言いました。彼が変更をプッシュしようとしたとき、gitはプッシュを拒否しました。リモート側で変更があったからです。彼が引っ張ったとき、gitはマスターに合併したコミットのrebaseを作ったが、今はmasterよりも29 commitしかなかった。
リベース後、コミットは機能ブランチからのコミットではなく、新しいコミットとして再適用されるため、マージコミットが失われたと考えられます。
プッシュした後、木はそのようなものだったが:
* c3'(head, master, origin/master)
* c2'
* c1'
| * c3 (feature_branch, origin/feature_branch)
| * c2
| * c1
|/
*
私が達成しようとしたものである。
* c4 (head, master, feature_branch, origin/master)
| \
| * c3 (origin/feature_branch)
| * c2
| * c1
|/
*
マージは、私は「何を、早送りマージのように見えました分岐の歴史を維持するために避けようとしています。
私はこれを避けるために何ができるのですか?
おかげで、
編集:この記事は私の問題descibes :http://notes.envato.com/developers/rebasing-merge-commits-in-git/
は今私の知る git rebase
のオプションを--preserveを-マージしますが、このオプションを作るための方法がありますデフォルト?
これ以外の場合、開発者はgit pull
ではなく、git fetch
とgit rebase origin/master
でなければなりません。
このリンクを試してください:http://www.randyfay.com/node/89私を最も助けました。 –
ここのデベロッパーたちは、 'git push --force'について知らないのです。 しかし、この記事がどのように役立つか分かりません、もっと説明できますか? リモートには、すべての作業がマスターにマージされる前にレビューされるので、マージする前にブランチをリベースすることはできません(最初にブランチをプッシュする前に、マスターからリベースするように指示されます)。 –
個人的には、「マージワークフローの代替案」に記載されているプルリクエスト戦略が好きです。このレビュープロセスでは、http://code.google.com/p/gerrit/を使用することができます。マスタブランチとのマージを担当する1人は制限的で、マージ可能でない場合はプルリクエストを拒否する必要があります。 –