👀

git rebase基礎【備忘録】

2022/11/29に公開

記事の概要

GitHub Desktop上でrebaseしようとすると、なぜかmerge commitが作られてしまうので、
ターミナルから正しくrebaseをする方法の備忘録。

なぜrebase?

mergeではPRを見るときにlogがごちゃついて読みにくい。
rebaseなら本当に必要なcommitだけがlogに残る。

想定読者

  • 普段はGitHub Desktopの恩恵を受けているのでターミナルでのgit操作を忘れてしまう人(私)
  • rebase自体の意味は知っているが、rebaseするのが怖い人(私)

本題: rebaseのやり方

例: working-branchに、developのcommitを取り込みたい

git checkout develop
git pull origin develop
git checkout working-branch
git rebase develop
git push --force-with-lease origin working-branch

ここまでが1セット。ちなみに

git push -f origin working-branch

してしまうと、うっかり他人のコードを上書きしてしまう危険があるので、

git push --force-with-lease origin working-branch

の方がいい。

おまけ: 誤ったmerge-commitを取り消したい

working-branchに不要なmerge-commitを作ってしまった上に、
リモートにpushしてしまった時は、次の手順で取り消せる。
(現在位置はworking-branchとする)

git reset —hard HEAD^
git push --force-with-lease origin working-branch

HEAD^HEADの一つ前のコミット(今回の場合merge-commitのひとつ前)を指す。

もしまだリモートにpushしてないのなら、

git reset --soft HEAD^

で済むし、git push --force-with-leaseも不要。

Discussion