3

マスターの上に適用したい小さなトピックブランチ(寄稿者のリモートリポジトリ上)があります。これを行うための標準的な方法は次のとおりです。

git merge contributor/topic-branch

ただし、マージコミットを生成するのではなく、コミットを1つずつ適用したいと思います。

トピックブランチが私のアップストリームであるかのように、マスタートピックブランチに適用するため、単純に実行してgit rebase contributor/topic-branchも明らかに機能しません。だから私はこれを試しました:

git rebase master contributor/topic-branch

そして、これは私が望むことを行いますが、今は分離されたHEADがあり、マスターブランチを修正してHEADを指すようにする必要があります(を使用してbranch -f)。もちろん、これを自動的に行うBash関数を作成することもできますが、使用せずにトピックブランチをプルする「適切な」方法はありmergeますか?

4

3 に答える 3

13

どうですか:

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

これにより、ローカルブランチの問題が解決されます。追跡ブランチの解決は演習として残されています。

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

于 2011-03-01T20:22:27.680 に答える
2

また、cherry-pickがコミット範囲をサポートしていることもわかったので、

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

topic-branch(これは、HEADから到達できないすべてのコミットを連続して適用します。)

トピックブランチにマージコミットがある場合、これは失敗するというマニュアルページからわかります。したがって、これは線形履歴のある単純なケースでのみ機能します。

また、ローカルトピックブランチでこれを行う場合、マージされたbranch -dものは検出されないため、topic-branchを使用する必要があります-D。(比較すると、Philipのrebase+mergeメソッドにはこの問題はありません。)

于 2011-03-02T00:10:55.217 に答える
0

commit-start-idコミットの範囲をからに移植する場合はtopic-branch-head

git checkout contributor/topic-branch
git rebase --onto master <commit-start-id>
于 2011-03-01T20:40:30.300 に答える