[解決済み] あるブランチから別のブランチへコミットをコピーするには?
質問
マスターから2つのブランチを持っています。
- v2.1 : (バージョン2)数ヶ月前から取り組んでいる
- wss : 昨日、ある特定の機能をマスター (本番) に追加するために作成したものです。
昨日のコミットをwssからv2.1へコピーする方法はありますか?
解決方法は?
本当はマージで全部できるようなワークフローにすべきなんでしょうけど。
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
つまり、あなたがしなければならないことは
git checkout v2.1
と
git merge wss
. もし、何らかの理由でどうしてもこれができない場合、そして
git rebase
を実行して wss ブランチを正しい場所に移動させれば、どこかからひとつのコミットを取得してそれを別の場所に適用するコマンドを実行できます。
git チェリーピック
. 適用したいブランチをチェックアウトして、次のように実行するだけです。
git cherry-pick <SHA of commit to cherry-pick>
.
rebase があなたを救うかもしれない方法のいくつか。
履歴がこのような場合
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
を使うことができます。
git rebase --onto v2 v2-only wss
を使えば、wssを直接v2上に移動させることができます。
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
そして、マージすることができます もしあなたが本当に、本当に 本当に がマージできるところまで到達できなくても、rebase を使って一度に複数のチェリーピックを効果的に行うことができます。
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
注:これを行うために余分な作業が必要になる理由は、リポジトリに重複したコミットを作成することになるからです。ブランチやマージを簡単に行うためのポイントは、一か所でコミットを行い、それを必要な場所にマージすることですべてを行えるようにすることです。重複したコミットは、その二つのブランチを決してマージしないという意思を表します(後でマージしたいと思ったときに、コンフリクトが発生します)。
関連
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git rebase の取り消し
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] Git で別のブランチからブランチを作成する
-
[解決済み] ある Git ブランチから別のブランチに、単一のファイルのバージョンをコピーするにはどうすればよいですか?
-
[解決済み】ローカルの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 pull リモートブランチがリモートの参照先を見つけることができない
-
[解決済み】GitHub: クローンには成功したが、チェックアウトに失敗した
-
gitコミット発生 ! [リモート拒否] master -> master (pre-receive hook declined) 解決策
-
[解決済み] このリポジトリで別の git プロセスが実行されているようです。
-
[解決済み] 警告: リモート HEAD は存在しない参照元を参照しているため、チェックアウトできません。
-
[解決済み] Git で別のブランチからブランチを作成する
-
[解決済み] Git で特定のコミットをマージする方法
-
[解決済み] ある範囲のコミットを選んで、別のブランチにマージする方法は?
-
[解決済み】Macにgitkをインストールする。
-
[解決済み] マージ Hg/Git vs. SVN