👀
git rebase基礎【備忘録】
記事の概要
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