Git 실전 · 되돌린 기능이 다시 안 들어온다 · 실습
되돌린 기능을 다시 넣으려는데 합칠 것이 없다고 한다
목표
병합 커밋을 되돌리고 되살리고, 릴리스 브랜치의 수정을 출처를 남기며 가져옵니다.
그리고 무엇이 이미 들어갔는지 기계가 어떻게 판정하는지까지 확인합니다.
왜 중요한가
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. 릴리스의 핫픽스 커밋을 -x 로 main 에 가져옵니다.
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 에 언제 무엇을 쓰는지 정리합니다.
참고
- 저장소마다
git config user.email과user.name을 지정해야 커밋이 됩니다. git revert --no-edit와GIT_EDITOR=true를 쓰면 편집기가 열리지 않습니다.- 흔한 실수: 3단계에서
merge가 "Already up to date" 를 내는 것을 실패로 보고 - 흔한 실수: 5단계에서 충돌 표시(
<<<<<<<)를 파일에 남긴 채git add하는 것입니다.
커밋 시각은 GIT_AUTHOR_DATE 와 GIT_COMMITTER_DATE 로 고정하세요.
--force 류를 찾는 것입니다. 정확한 답이고, 해법은 되돌림을 되돌리는 쪽입니다.
그 표시까지 커밋됩니다.
단계 8개
- 병합 커밋과 릴리스 브랜치가 있는 이력
- 병합 커밋은 어느 쪽으로 돌아갈지 말해야 한다
- 다시 merge 해도 합칠 것이 없다
- 출처를 남기며 가져오기
- 충돌하면 물러섰다 다시 온다
- 무엇이 이미 들어갔는지 세어 보기
- 해시는 다른데 patch-id 는 같다
- 언제 무엇을 쓰는가