all your base are belong to us
あらすじ: git commit、git pushして作業終了 ↓ 翌日、最後のcommitが気に入らなくなってgit checkout HEAD^ ↓ そのまま作業終了、commit ↓ fast-forwardでpushできない! ↓ 昨日のことを忘れてmergeしたらconflictの嵐 ↓ \(^o^)/
解決編:
git branch dummy origin/working
git checkout dummy
git revert xxxxxxxx
git checkout working
git rebase dummy working
git push origin working
現在のorigin/workingを元にdummyブランチを切り、戻したい段階に戻ってからworkingにrebase。
教訓: むやみにpull originしたりmergeするのはやめて、rebaseを使うべし。
最後に、origin/masterの変更をworkingに適用する手順をまとめておく。
git checkout master
git pull origin master
git checkout working
git rebase master
# conflictがある場合ここで表示されるので編集
git add path/to/conflicted_file
git rebase --continue
# conflictの数だけ繰り返し