はじめに
こんにちは、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して綺麗な状態に $ git rebase origin/ブランチ名 # stashした差分を取り込む $ git stash pop stash@{0} |
reset
を2回やって巻き戻していますが、1回でも良いと思います。
これで綺麗なログに戻すことができました!
さいごに
私は、消すこともログを残した方が良いと思っているタイプなので、普段は
revert
を使っていますが、今回はあまりにブサイクになってしまうので、
reset
を使いました。
Gitのログも綺麗に残したいですよね。