2011-03-01 12 views
2

寄稿者のリモートリポジトリ上に小さなトピックブランチがあり、マスターの上に適用したい。Git:リベースを使用してトピックブランチを適用する(マージなし)

git merge contributor/topic-branch 

しかし、私はコミットをしていたいのですが一つ一つの代わりにマージコミットの生成を適用:私はこれを行うための標準的な方法があると思います。

私のマスターにトピックブランチに適用しているので、ネイティブ実行git rebase contributor/topic-branchは明らかに動作しません。トピックブランチが自分のアップストリームであるかのように。

git rebase master contributor/topic-branch 

そして、これは、今、私が切り離さHEADを持っている、と私はHEADを指すようにmasterブランチを修正する必要があります(使用してbranch -f)を除いて、私が欲しいものを行います。だから私はこれを試してみました。私はもちろんこれを自動的に行うためのBash関数を書くことができますが、mergeを使わずにトピックブランチを引き出すための「適切な」方法がありますか?これは、ローカルブランチのための問題を解決し

git checkout topic-branch 
git rebase master 
git checkout master 
git merge topic-branch 

:どの程度

答えて

12

。トラッキングブランチを解決することは練習として残されています。

編集:私はここで何が起こっているのか説明する必要があります。まず、トピックブランチに変更します。トピック・ブランチをマスターに基づいてリベースします。 (もちろん、すべてがまだ動作していることをテストします。には自動テストがありますか?)トピックブランチがマスターよりも先になったので、マスターに戻ってトピックをマスターにマージすることができます。それは早送りなので、マージコミットは必要ありません。

+0

ええ、トラッキングブランチの場合は、まずローカルブランチにコピーしてから、それを削除する必要があります。バッシュ関数にすべてをラップすると、実際には使えるかもしれません。 –

+0

@Jo Liss no!それはすべての重要なテストステップを欠場する!リベースをテストして、壊れたコミットをマスターにマージしないようにする必要があります。これは、基本的に2段階のプロセスです。1.トピックを再分類し、それが機能することを確認する。 2.トピックをマスターに早送りする。ワンステッププロセスにするのは危険です。なぜなら、トピックのブランチがリベース後に機能することを確認する品質管理の手順が間違っているからです。 –

+0

'git merge remote/branch'にも同じことは適用されませんか?私は実際に(しかし、私がプッシュする前に)、そして事態がうまくいけば、 'rebase -hard origin 'で後退していることを恐れて快適にテストしています。 –

0

あなたはcommit-start-idtopic-branch-headへのコミットのポート範囲にしたい場合は、

git checkout contributor/topic-branch 
git rebase --onto master <commit-start-id> 
+0

これは私のためのノーオペレーションです(私はそれがマスターにマスターをリベースするためだと思います)。 –

+0

@Joが更新されましたが、正確にOPが何をしたいのか分かりません – CyberSnoopy

+0

ああ、OK。私は、マージコミットを生成せずにtopic-branch *を* masterに引き出しようとしていますが、これはトピックブランチを元に戻すので、問題を解決するとは思わないのです。しかし、ありがとう! –

2

は私もちょうどあなたができるように、チェリーピックは、範囲をコミットサポートしていることを考え出したん

git cherry-pick HEAD..contributor/topic-branch 

(これは、HEADから届かないtopic-branchのすべてのコミットを順番に適用します)

私は感覚f manページでは、トピックブランチにマージコミットがあるとこれが失敗するので、これは線形履歴の単純なケースでのみ機能します。

また、ローカルトピックブランチでこれを行うと、branch -dtopic-branchがマージされたことを検出しないため、-Dを使用する必要があります。 (フィリップスのrebase + mergeメソッドはこの問題がありません)

+0

これはマージではうまくいかないことを確認できますが、これは残念です。 :( –

関連する問題