1. ホーム
  2. git

多くのコミットをマージして、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 を使用してください。