カテゴリー: BackEnd

【Git】マージコミットを消したい

はじめに

こんにちは、tonnyです。
今回はGitのケーススタディ的なものを書きたいと思います。
反面教師として利用してください。

例えばこんなことってないでしょうか?

同じ開発ブランチで、既にリモートブランチが進んでいると、「プルしなさい」と怒られてしまいます。
ここで`git pull –rebase`を使用すれば、マージコミットもできず、綺麗にリモートを取り込めます。
git pullgit pull --rebaseの違いはこちらのサイトで分かりやすく紹介されております。
git pull と git pull –rebase の違いって?図を交えて説明します!

ただ先日、rebaseオプションを付け忘れ、ふつうにpullしてしまいました。
その場合、下図のようなログになります。

このマージコミットが非常に邪魔です。

マージコミットを消す

コミットを巻き戻すときにはresetrevertが使用されるかと思います。
revertだと「消したというログ」ができてしまうため、resetを使用します。
resetにも大きく2種類あり、コミットと一緒に変更したファイルまで消してしまうhardオプションと、変更したファイルは残しておくsoftオプションがあります。

ケースバイケースで使い分けるとして、今回はsoftオプションでコミットだけ消し、rebaseしたいと思います。

# マージコミットをなかったことに
$ git reset --soft
# 自分のコミットをなかったことに
$ git reset --soft
# 1回stashで逃がす
$ git stash save "テンポラリ"
# rebaseして綺麗な状態に
$ git rebase origin/ブランチ名
# stashした差分を取り込む
$ git stash pop stash@{0}

resetを2回やって巻き戻していますが、1回でも良いと思います。
これで綺麗なログに戻すことができました!

さいごに

私は、消すこともログを残した方が良いと思っているタイプなので、普段はrevertを使っていますが、今回はあまりにブサイクになってしまうので、resetを使いました。

Gitのログも綺麗に残したいですよね。

naoki85

シェア
執筆者:
naoki85
タグ: Git

最近の投稿

go 1.24の tool directive でツールを管理する

はじめに プロダクト開発を行う…

2か月 前

uvの本番環境用dockerのマルチステージビルド

はじめに uvで本番環境のdo…

3か月 前

Go 1.24で追加されたweak pointer

はじめに 前回の記事では、Go…

3か月 前

Next.jsでサイトマップの実装

はじめに Next.jsでサイ…

4か月 前