[解決済み] Git で、別のブランチの変更を選択的にマージしたり選択したりするにはどうすればよいですか?
質問
新しいプロジェクトで Git を使っているのですが、そのプロジェクトには二つの並行した -- しかし現在は実験的な -- 開発ブランチがあります。
-
master
: 既存のコードベースのインポートと、私が概ね確信しているいくつかの修正。 -
exp1
実験用ブランチ #1 -
exp2
実験用ブランチ #2
exp1
と
exp2
は、2つの全く異なるアーキテクチャのアプローチを表しています。もっと先に進むまで、どちらがうまくいくのか(もしどちらかであったとしても)知る由もないのです。一方のブランチで作業を進めるうちに、もう一方のブランチでも役に立つような編集をすることがあるので、そのようなものだけをマージしたいと思っています。
ある開発ブランチから別の開発ブランチへ、選択的な変更をマージし、他のすべてを残すための最良の方法は何でしょうか?
私が考えたアプローチ
-
git merge --no-commit
その後、ブランチ間で共通化したくない大量の編集を手動でアンステージしています。 -
共通ファイルを一時ディレクトリに手動でコピーし、その後に
git checkout
を使用して別のブランチに移動し、さらに手動で一時ディレクトリから作業ツリーにコピーしています。 -
上記のバリエーションです。を放棄して
exp
ブランチを使用し、実験的に2つのローカルリポジトリを追加で使用します。 こうすることで、手動でのファイルのコピーがより簡単になります。
これら3つのアプローチは、いずれも面倒でミスが起こりやすいように思います。 もっといい方法があるといいのですが、フィルターパスのパラメーターのようなもので
git-merge
をより選択的にすることができます。
解決方法は?
を使用します。 チェリーピック コマンドを使用すると、ひとつのブランチから個々のコミットを取得できます。
もし欲しい変更が個々のコミットに含まれていない場合は、ここで紹介する方法を使って
コミットを個々のコミットに分割する
. 大まかには
git rebase -i
を使用して編集する元のコミットを取得し、次に
git reset HEAD^
で選択的に変更を取り消し、次に
git commit
を使えば、その部分を新しいコミットとして履歴に残せます。
もう一つの素晴らしい方法がここにあります
は、Red Hat Magazine の中で
git add --patch
または、場合によっては
git add --interactive
これは、異なる変更を個々のファイルに分割したい場合、ハンクの一部だけを追加することができます (このページで "split" を検索してください)。
変更点を分割したことで、必要な変更点だけを選び出すことができるようになりました。
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] 2つのリビジョン間でどのファイルが変更されたかを表示する
-
[解決済み】ローカルの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:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】GitHubのメッセージの意味: メールのプライバシー制限のためプッシュが拒否されました。
-
[解決済み] [Solved] 作業ツリーのディレクトリ 'example.com' を作成できませんでした。パーミッションが拒否されました
-
[解決済み] [Solved] originにプッシュしようとすると、Gitが「No such remote 'origin'」と言うのはなぜですか?
-
[解決済み] git stashを元に戻す
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?
-
[解決済み] ある Git ブランチから別のブランチに、単一のファイルのバージョンをコピーするにはどうすればよいですか?
-
[解決済み] master からの Git ブランチの更新
-
[解決済み】Gitブランチから特定のファイルをマージする方法
-
[解決済み】どのようなGitブランチングモデルが有効ですか?