多くのコミットをマージして、1つを残すにはどうしたらいいですか?
2023-12-15 03:35:18
質問
この機能ブランチ "foo" があるとします。それを master にマージしたいのですが、master には残したくないデバッグ用のコードを追加してしまいました。
デバッグコードはそれ自身のコミットで、私は
git cherry-pick
を各コミットで使って、このコミットを省くこともできます。しかし、それはかなり面倒なことになりそうです。
これを行う "inverse cherry-pick" や、インタラクティブなマージはありますか?
どのように解決するのですか?
対話型リベースを使用する。
git rebase -i SHA-OF-FIRST-COMMIT-IN-BRANCH
これで$EDITORにこのようなものが開かれます。
pick 8ac4783 folders and folders
pick cf8b1f5 minor refactor
pick 762b37a Lots of improvement. Folders adn shit.
pick 3fae6e1 Be ready to tableview
pick b174dc0 replace folder collection view w/ table view
pick ef1b65b more finish
pick ecc407f responder chain and whatnot
pick 080a847 play/pause video
pick 6719000 wip: movie fader
pick c5f2933 presentation window fade transition
# Rebase e6f77c8..c5f2933 onto e6f77c8
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
つまり、デバッグコミットを含む行を削除し、ファイルを書き込んでエディタを閉じれば、git は以下のような内容を教えてくれるのです。
Successfully rebased and updated refs/heads/master.
これで、そのブランチを master にマージすることができます。
UPDATE: 歴史を変更するために
rebase
は
だけです。
はプライベートブランチで発生します。もしこのブランチが一般に公開されている場合は
git revert
を使用してください。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み] 2つのリビジョン間でどのファイルが変更されたかを表示する
-
[解決済み] 現在のGitブランチをmasterブランチにする
-
[解決済み] 複数のコミットを1つのスクワッシュされたコミットとして別のブランチにマージするにはどうすればよいですか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
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 で直近のローカルコミットを取り消すには?
-
git push issues
-
[解決済み】Gitでブランチポイントを見つける?
-
[解決済み】Gitでステージング・エリア(=インデックス=キャッシュ)からファイルを削除する方法は?
-
[解決済み] 新サーバーへのGitプッシュ/クローン
-
[解決済み] Git は、省略形のコミット ID が 2 つの異なるコミットを参照する場合に警告を発しますか?
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] GitとSSH、どちらのキーを使うか?
-
[解決済み] Git のプッシュが "non-fast-forward" で拒否されました。