[解決済み] git - マージ時に特定のコミットをスキップする
質問
Git を使い始めてから約一年が経ち、素晴らしいものだと思っています。しかし、ちょうどプロジェクトの第二バージョンに着手し、そのために新しいブランチを立ち上げました。今後どのように処理するのがベストなのか、少し悩んでいます。
私は、master10(v1用)とmaster20(v2用)という2つのブランチを持っています。v1 のバグフィックスを master10 ブランチで行い、新しいものを master20 ブランチで開発しています。バグフィックスのたびに、master20 をチェックアウトして、v2 にマージしています。
git merge master10
. 今のところ順調です。
しかし、v1ではv2には不要な変更を加えてしまいましたが、他のバグフィックスを引き続きマージしたいのです。そのコミット (あるいはある範囲のコミット) をスキップして、他のバグフィックスをマージするように Git に指示するにはどうすればいいのでしょう。
と思ったら
git rebase
が必要かもしれませんが、ドキュメントを読んで、頭が爆発しそうになりました。
私が欲しいのは "git sync" コマンドのようなもので、git に二つのブランチが同期していることを伝え、将来的にはこの同期ポイントからのコミットのみをマージするものだと思います。
よろしくお願いします。
解決方法は?
たとえば、"maint" ブランチのコミットのうち、すべてではなく大部分を "master" にマージしたい場合、このようにすることができます。しかし、時にはリリース版に加えた変更を元に戻してはいけないということもあります(そのコードはすでに master で上書きされているかもしれません)。そこで...
たとえば、maint に 5 つの変更が加えられていて、そのうちの 1 つ (maint~3) は master にマージされないが、他のすべてはマージされるべきであるとします。この場合、3つの段階を踏みます。ひとつ前の変更をすべて実際にマージし、maint~3がマージされていない場合でもマージしたことにするようgitに指示し、その後残りの変更をマージします。マジックはこうです。
bash <master>$ git merge maint~4
bash <master>$ git merge -s ours maint~3
bash <master>$ git merge maint
最初のコマンドは、すべての 以前 面倒な maint コミットは master に移動します。デフォルトのマージログメッセージでは、"branch 'maint' (early part)" をマージしていることが説明されます。
2 番目のコマンドは厄介な maint~3 コミットをマージしますが、"-s ours" オプションは git に特別な "merge strategy" を使うよう指示します。しかし、HEAD と maint~3 を親とする新しいマージコミットが作成され、リビジョングラフは maint~3 がマージされたと表示されるようになります。ですから、実際には -m オプションを使用して
git merge
のコミットが実際には無視されていることを説明するためです!
最後のコマンドは、maint の残り (maint~2..maint) を master にマージして、再び同期させるだけです。
関連
-
[解決済み] Git のアンプッシュされたコミットを表示する
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み] 2つのリビジョン間でどのファイルが変更されたかを表示する
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルの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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み】git push >> fatal: 設定されたプッシュ先がありません。
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push s...
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] fatal: EOF が早い fatal: インデックスパックが失敗した
-
[解決済み] ブラウンアウトの一環として、パスワード認証が一時的に無効になっています。代わりに個人用アクセストークンを使用してください[重複]。
-
[解決済み] git rebase: "error: cannot stat 'file': パーミッションが拒否されました"
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み] "fatal: This operation must be run in work tree." というメッセージが表示されるのはなぜですか?