ログイン新規登録

Qiitaにログインして、便利な機能を使ってみませんか?

あなたにマッチした記事をお届けします

便利な情報をあとから読み返せます

5

この記事は最終更新日から3年以上が経過しています。

不要マージコミットを消し去ってプッシュし直したい

投稿日

先日不要なmerge commitを含んだブランチをリモートにプッシュしたらあわわわになったので残します。
誤った理解で実行していたものがあったのが原因なので後輩を生まないために記します。

背景

  1. ローカル feature/で作業していた
  2. 誤って作業ブランチにプルった(ブランチ違いに気付いてない
  3. merge commitに気付かず作業ブランチをリモートプッシュ
  4. やばい要らんコミットめっちゃある😇

やりたいこと

  • merge commit をないことにして、上がってしまった不要なコミットを消したい

やったこと

まず調べたら出てくる[マージコミット 取り消す]とかで出てくるrevertを実行。

1. revertで該当マージコミットを打ち消す

git revert -m 1 <merge commit>

マージコミットに対してrevertを使用する場合は--mainline (-m)のオプションが必要。
ちなみにこの数字は、マージコミットを消し去った場合に、マージされた側(1)、マージした側(2)どちらを軸にするかという事。

2. 差分が消えたのでプッシュしたらコミットだけ残っている

Screen Shot 2019-08-31 at 11.14.37.png

ここで先輩エンジニアが、こいつをこのまま独走させる何かヤバイと感じ取ってくれたのか以下の解決策を提案してくれた。

解決策

rebaseでコミットを削除して整える

git rebase -i -p <消したいコミットの一個前>

を使用して不要なコミットを削除。
この場合、以下の2行を削除。

pick 25c2372 Merge........... ← 間違ったマージコミット削除
pick 9770416 first...........
pick 9999999 Revert.......... ← 失敗したリバート削除

プッシュすると不要コミットがなくなって理想の形に。

rebase オプション詳細

略  正式 用途
-i --interactive 文字通り対話的に操作でき、コミットの削除や複数をまとめたりといった操作が可能
-p --preserve--merges ブランチの構成を保ったままリベースされる
参考: https://qiita.com/yukimaeto/items/983a4e27dbc92e6aa6fb

※--preserve--mergesは git version 2.20よりdeprecatedになります。代替えとして--rebase--mergesが用意されています。

まとめ

結局rebase -iが使い勝手よくて良い。
だがなぜrevertしたのにコミットがたくさん残っていたのかわからない。メインラインが
逆だったのだろうか。

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
  3. ダークテーマを利用できます
ログインすると使える機能について
sho_v00

@sho_v00(Sho)

iOS developer. 活動記録は個人ブログにて。 こちらは気まぐれ。
yumemi
みんな知ってるあのサービスも、ゆめみが一緒に作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用の内製化支援。Swift,Kotlin,Rust,Go,Flutter,ML,React,AWS等エンジニア・クリエイターの会社です。Xで情報配信中:https://twitter.com/yumemiinc

コメント

この記事にコメントはありません。

いいね以上の気持ちはコメントで

Qiita Conference 2024 4月17日(水)~19(金)開催!

Qiita Conferenceは、Qiita最大規模のテックカンファレンスです!

基調講演ゲスト(敬称略)

牛尾剛、 市谷聡啓、 けんすう、 ゆる言語学ラジオ、 田中邦裕、小城久美子、 飯沼亜紀

記事投稿キャンペーン開催中

Qiita×Findy記事投稿キャンペーン 「今の開発組織でトライしたこと・トライしていること・トライしようとしていること」

~
詳細を見る
5

新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる

ソーシャルアカウントでログイン・新規登録

メールアドレスでログイン・新規登録