[解決済み] ある範囲のコミットを選んで、別のブランチにマージする方法は?
質問
以下のようなリポジトリレイアウトがあります。
- master ブランチ (本番)
- 統合
- 作業
私が実現したいのは、workingブランチからある範囲のコミットをチェリーピックして、integrationブランチにマージすることです。私は git の初心者ですが、リポジトリを混乱させることなくこれを正確に行う方法 (マージではなく、コミット範囲のチェリーピック) を見つけることができません。この件に関して何かご指摘やご意見はありませんか?ありがとうございます。
解決方法は?
さまざまなコミットがある場合、チェリーピック
は
でした
実用的ではない
として 以下のとおりです。 によって キース・キム Git 1.7.2 以降では、コミットの範囲をチェリーピックする機能が導入されました (しかし、まだ チェリーピックが将来のマージに与える影響 )
git cherry-pick"は、コミットの範囲を選択することを学びました。
(例: "cherry-pick A..B
"と "cherry-pick --stdin
")もそうですが、"git revert
これらは、より良いシーケンス制御 " をサポートしていません。rebase [-i]
"が持っていますが。
で、"。
cherry-pick A..B
"形式です。A
よりも古い必要があります。B
.
もし順番を間違えると、コマンドは黙って失敗します。 .
を選びたいなら
範囲
B
を通して
D
(を含む
B
)
ということになります。
B^..D
(代わりに
B..D
).
"をご覧ください。
Git は、以前のコミットの範囲からブランチを作成しますか?
"を図解しています。
これは、次のように仮定しています。
B
がルートコミットでない場合は、" が表示されます。unknown revision
そうでない場合はエラーになります。
注意:Git 2.9.x/2.10 (Q3 2016) より、オーファンブランチ (空の頭) で直接コミットの範囲をチェリーピックできるようになりました:" を参照してください。 gitで既存のブランチを孤児にする方法 となります。
当初の回答(2010年1月)
A
rebase --onto
のように、指定した範囲のコミットを統合ブランチの上で再生させるのがよいでしょう。
チャールズ・ベイリー氏は次のように説明しています。
.
(また、"あるブランチに基づくトピックブランチを別のブランチに移植する方法を示します"の中にあるものを探してください。
git rebase のマニュアルページ
の実用的な例を見ることができます。
git rebase --onto
)
現在のブランチがintegrationの場合。
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the integration branch to the head of the new patchset
git branch -f integration last_SHA-1_of_working_branch_range
# Rebase the patchset onto tmp, the old location of integration
git rebase --onto tmp first_SHA-1_of_working_branch_range~1 integration
これで間のすべてを再生します。
-
の親の後に
first_SHA-1_of_working_branch_range
(そのため~1
): リプレイしたい最初のコミット -
までなら"です。
integration
"(再生したい最後のコミットを指しています。working
ブランチ)
を"に変更しました。
tmp
を指しています。
integration
を指していた)
これらのコミットのいずれかが再生されたときに競合が発生した場合。
-
解決して " を実行するか。
git rebase --continue
"です。 -
または、このパッチをスキップして、代わりに " を実行してください。
git rebase --skip
をクリックします。 -
または、"で全てをキャンセルします。
git rebase --abort
"(そしてintegration
ブランチをtmp
ブランチ)
その後
rebase --onto
,
integration
は統合ブランチの最後のコミットに戻ります (つまり、"
tmp
"ブランチ + リプレイされたすべてのコミット)
チェリーピックを使用したり
rebase --onto
のように、後続のマージに影響を与えることを忘れないでください。
ここに記載されている
.
純粋な"です。
cherry-pick
"ソリューションとは
こちら
というようなものです。
パッチのアプローチを使いたい場合は、"git format-patch|git am" と "git cherry" が選択肢となります。
現在git cherry-pick
は単一のコミットしか受け付けませんが、範囲を指定したい場合はB
を通してD
ということになります。B^..D
は、git の専門用語で
git rev-list --reverse --topo-order B^..D | while read rev
do
git cherry-pick $rev || break
done
しかし、いずれにせよ、ある範囲のコミットを "replay" する必要がある場合、 "replay" という単語は " を使用することを後押ししてくれるはずです。
rebase
"というGitの機能です。
関連
-
[解決済み] masterブランチと'origin/master'が分岐している、'undiverge'ブランチの方法は?
-
[解決済み] VSTS Git Fetch Failed with exit code: 128
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git rebase の取り消し
-
[解決済み] Git のローカルコミットを破棄する
-
[解決済み] 現在のGitブランチをmasterブランチにする
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] Git で、別のブランチの変更を選択的にマージしたり選択したりするにはどうすればよいですか?
-
[解決済み] Gitによるhotfixブランチのfeatureブランチへのマージ
-
[解決済み] 他のgitリポジトリからコミットをチェリーピックすることは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み] 複数のコミットをチェリーピックする方法
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み] Git エラー : 'upstream' は git リポジトリでないようです。
-
[解決済み] Git で特定のコミットをマージする方法
-
[解決済み] GitのHEAD^とHEAD~の違いは何ですか?
-
[解決済み] あるブランチから別のブランチへコミットをコピーするには?
-
[解決済み] git で特定のコミットを別のブランチに移動させるには?
-
[解決済み】どのようなGitブランチングモデルが有効ですか?