C.W.K.
Stream
Lesson 03 of 05 · published

revert: shared history의 안전한 undo

~18 min · revert, shared-history

Level 0Untracked 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Revert 는 shared history 용 안전한 undo

Reset 은 history 를 rewrite. Revert 는 history 를 inverse commit 으로 확장. git revert <hash> 는 target commit 의 정반대 변경을 가진 새 commit 만들어 — 같은 파일 수정, 반대 방향. History 기록 그대로: 원본 commit 여전히 있고, 그 위에 새 revert commit 이 '그거 undo 함' 표시. push 됐고 남이 그 위에 작업한 commit 의 유일한 안전 undo.

의미가 깨끗해. git revert HEAD 가 가장 최근 commit 의 revert. git revert abc1234 는 그 사이 수십 commit 이 있어도 특정 옛 commit revert. Revert 가 옮기거나 추가 수정된 줄 건드리면 conflict — merge 와 같은 해결 loop: 편집, git add, git revert --continue. git revert --no-edit 는 editor 건너뛰고 Git default 메시지 사용.

Commit 범위는 git revert OLDEST..NEWEST 가 source commit 당 revert commit 하나씩, 역순으로 만들어. 관련 변경 시퀀스 undo 에 유용. --no-commit 은 commit 없이 revert 만 stage — 그게 history 에 더 잘 읽히면 여러 revert 를 한 commit 으로 묶을 수 있어.

특수 케이스: merge commit revert. Merge commit 은 parent 가 둘이라 Git 이 어느 쪽이 유지할 'mainline' 인지 알아야 해. git revert -m 1 <merge-hash> 는 parent 2 (merge-in 된 branch) 에서 들어온 변경을 undo 해서 merge 를 revert, parent-1 history 는 그대로. Merge 된 기능이 망가졌는데 full reset 못 할 때 이게 맞는 동작.

Code

Revert 기본·bash
# 최신 commit revert (위에 새 commit 생성):
git revert HEAD

# Hash 로 특정 옛 commit revert:
git revert abc1234

# Editor 안 열고 revert:
git revert --no-edit abc1234

# 범위 revert — source commit 당 revert commit 하나:
git revert OLDEST_HASH..NEWEST_HASH

# 모든 revert 를 commit 하나로 묶기:
git revert --no-commit OLDEST..NEWEST
git commit -m "Revert feature X (multi-commit rollback)"
Merge commit revert·bash
# 프로덕션 깨뜨린 merge 후:
git log --oneline --merges -n 5      # 안 좋은 merge 찾기

# parent-1 (mainline) 을 유지 쪽으로 두고 merge revert:
git revert -m 1 <merge-hash>

# -m 1 은 "첫 번째 parent 가 mainline".
# 장기 branch 에서 cherry-pick 했으면 -m 2 가 맞을 수도.

# Revert push (force-push 필요 없음 — 일반 commit):
git push

External links

Exercise

Commit 셋 이상인 branch 에서 git revert <hash> 로 가운데 거 revert. git log 보고 원본 + revert 둘 다 보이는지 확인. 그 다음 다른 branch 를 현재 거에 merge (merge commit 생성) 하고 그 merge 를 git revert -m 1 <merge-hash> 로 revert. log graph 읽고 audit trail 이 reader 에게 뭘 말하는지 한 줄로 적어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.