[解決済み】Gitのマージコミットをリベースする
2022-04-07 18:31:36
質問
次のようなケースを想定してください。
トピックブランチで作業をしていて、master にマージする準備ができました。
* eb3b733 3 [master] [origin/master]
| * b62cae6 2 [topic]
|/
* 38abeae 1
masterからのマージを実行し、コンフリクトを解決して、今に至ります。
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | eb3b733 3 [origin/master]
|/
* 38abeae 1
さて、マージに時間がかかったので、もう一回フェッチしてみると、リモートの master ブランチに新しい変更があることに気づきました。
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
| | * e7affba 4 [origin/master]
| |/
|/|
* | eb3b733 3
|/
* 38abeae 1
もし私が
git rebase origin/master
を master から取得すると、すべてのコンフリクトを再び解決しなければならず、マージコミットも失われてしまいます。
* d4de423 2 [master]
* e7affba 4 [origin/master]
* eb3b733 3
| * b62cae6 2 [topic]
|/
* 38abeae 1
マージコミットをリベースして、以下に示すような履歴を作成するきれいな方法はありますか?
* 51984c7 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | e7affba 4 [origin/master]
* | eb3b733 3
|/
* 38abeae 1
解決方法は?
ここには2つの選択肢があります。
ひとつは、インタラクティブなリベースを行い、マージコミットを編集し、手動でマージをやり直し、リベースを継続する方法です。
もうひとつは
--rebase-merges
オプションで
git rebase
というのがあり、マニュアルには以下のように記載されています。
デフォルトでは、リベースは単に todo リストからマージコミットを削除し、リベース後のコミットをひとつの直線的なブランチにまとめます。rebase-merges を指定すると、リベース対象のコミットを再作成してブランチ構造を保持しようとします。 これらのマージ・コミットで解決されたマージ競合や手動修正は、手動で解決/再適用する必要があります。 "
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み】"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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み】fatal: 有効なオブジェクト名ではない: 'master'
-
[解決済み] git rebase fatal: 必要なリビジョンは1つです。
-
[解決済み】GitHub: クローンには成功したが、チェックアウトに失敗した
-
[解決済み】マージが終了していません(MERGE_HEADは存在します)。
-
[解決済み] 複数のコミットをチェリーピックする方法
-
[解決済み] Git エラー : 'upstream' は git リポジトリでないようです。
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています
-
[解決済み] Git作者不明