はじめに
こんにちは、tonnyです。
今回はGitのケーススタディ的なものを書きたいと思います。
反面教師として利用してください。
例えばこんなことってないでしょうか?
同じ開発ブランチで、既にリモートブランチが進んでいると、「プルしなさい」と怒られてしまいます。
ここでgit pull --rebase
を使用すれば、マージコミットもできず、綺麗にリモートを取り込めます。git pull
とgit pull --rebase
の違いはこちらのサイトで分かりやすく紹介されております。
git pull と git pull –rebase の違いって?図を交えて説明します!
ただ先日、rebase
オプションを付け忘れ、ふつうにpull
してしまいました。
その場合、下図のようなログになります。
このマージコミットが非常に邪魔です。
マージコミットを消す
コミットを巻き戻すときにはreset
やrevert
が使用されるかと思います。revert
だと「消したというログ」ができてしまうため、reset
を使用します。reset
にも大きく2種類あり、コミットと一緒に変更したファイルまで消してしまうhard
オプションと、変更したファイルは残しておくsoft
オプションがあります。
ケースバイケースで使い分けるとして、今回はsoft
オプションでコミットだけ消し、rebase
したいと思います。
1 2 3 4 5 6 7 8 9 10 | # マージコミットをなかったことに $git reset--soft # 自分のコミットをなかったことに $git reset--soft # 1回stashで逃がす $git stash save"テンポラリ" # rebaseして綺麗な状態に $gitrebaseorigin/ブランチ名 # stashした差分を取り込む $gitstashpopstash@{0} |
reset
を2回やって巻き戻していますが、1回でも良いと思います。
これで綺麗なログに戻すことができました!
さいごに
私は、消すこともログを残した方が良いと思っているタイプなので、普段はrevert
を使っていますが、今回はあまりにブサイクになってしまうので、reset
を使いました。
Gitのログも綺麗に残したいですよね。