Revert는 공유 이력을 위한 안전한 undo야
Reset은 이력을 다시 쓰지만 revert는 반대 변경을 담은 commit으로 이력을 늘려. git revert <hash>는 대상 commit과 정반대의 변경을 가진 새 commit을 만들어. 원본 commit은 그대로 남고 그 위에 '이 변경을 되돌렸다'는 기록이 붙지. 이미 push했고 다른 사람이 그 위에서 작업한 commit을 안전하게 되돌리는 방법이야.
git revert HEAD는 가장 최근 commit을, git revert abc1234는 그 뒤에 수십 commit이 있어도 특정 옛 commit을 되돌려. 대상 줄이 이후에 이동하거나 더 수정됐다면 conflict가 날 수 있어. merge 때처럼 편집하고 git add한 뒤 git revert --continue해. git revert --no-edit는 편집기를 열지 않고 Git의 기본 message를 써.
git revert OLDEST..NEWEST로 범위를 주면 source commit마다 revert commit을 하나씩 역순으로 만들어. 이어진 변경 묶음을 되돌릴 때 유용해. --no-commit은 commit을 만들지 않고 반대 변경만 stage하므로, 여러 revert를 commit 하나로 묶는 편이 더 잘 읽힐 때 쓸 수 있어.
Merge commit은 parent가 둘이라 어느 쪽을 유지할 mainline으로 볼지 알려줘야 해. git revert -m 1 <merge-hash>는 첫 parent의 이력은 남기고 두 번째 parent에서 들어온 변경을 되돌려. merge된 기능이 운영을 망가뜨렸지만 branch 전체를 reset할 수 없을 때 맞는 동작이야.