LabHub
배우기 러닝패스 코스

Git 실전 · 되돌린 기능이 다시 안 들어온다 · 실습

되돌린 기능을 다시 넣으려는데 합칠 것이 없다고 한다

LabHub 에서 이어서 보기

목표

병합 커밋을 되돌리고 되살리고, 릴리스 브랜치의 수정을 출처를 남기며 가져옵니다.
그리고 무엇이 이미 들어갔는지 기계가 어떻게 판정하는지까지 확인합니다.

왜 중요한가

reset 은 커밋을 지우고 revert 는 뒤집는 커밋을 더합니다. 이미 남에게 간 이력에는
revert 밖에 쓸 수 없는데, 병합 커밋에서는 그 뒤집기가 간단하지 않습니다. 부모가
둘이라 어느 쪽 상태로 돌아갈지를 사람이 말해 주어야 합니다. 그리고 되돌린 다음이
더 중요합니다 — merge 는 이력의 도달 가능성으로 판단하므로, 되돌린 기능을 다시 merge
해도 "합칠 것이 없다" 고 답합니다. 이 두 가지를 모르면 장애 대응 중에 같은 자리에서
30분을 잃습니다. 마지막 두 단계는 백포트 운영의 기본기입니다. 같은 변경이 이미
들어갔는지를 해시가 아니라 patch-id 로 판정한다는 것, 그리고 충돌을 해결해 가져온
커밋은 그 판정에서 빠진다는 것을 직접 만들어 봅니다.

단계

1. /root/gitx7/repo 에 병합 커밋과 릴리스 브랜치가 있는 이력을 만듭니다.
2. 병합 커밋을 -m 없이 되돌려 보고, 거절 메시지를 notes/revert-m.txt 에 남긴 뒤
-m 1 로 되돌립니다.
3. git merge feature 가 무엇이라고 답하는지 notes/reland.txt 에 적고, 되돌림을
되돌려 기능을 되살립니다.
4. 릴리스의 핫픽스 커밋을 -xmain 에 가져옵니다.
5. 릴리스의 설정 변경 커밋을 가져오다 충돌하면 --abort 로 물러섰다가, 다시 해서
--continue 로 마칩니다. 과정을 notes/conflict.txt 에 남깁니다.
6. git cherry -v main release 결과를 notes/cherry.txt 에 남깁니다.
7. 원본과 가져온 커밋의 patch-id 를 notes/patchid.txt 에 나란히 적습니다.
8. notes/report.md 에 언제 무엇을 쓰는지 정리합니다.

참고

단계 8개

  1. 병합 커밋과 릴리스 브랜치가 있는 이력
  2. 병합 커밋은 어느 쪽으로 돌아갈지 말해야 한다
  3. 다시 merge 해도 합칠 것이 없다
  4. 출처를 남기며 가져오기
  5. 충돌하면 물러섰다 다시 온다
  6. 무엇이 이미 들어갔는지 세어 보기
  7. 해시는 다른데 patch-id 는 같다
  8. 언제 무엇을 쓰는가