패치의 첫 경로와 현재 디렉터리를 봅니다
git status --short
git apply --stat change.patch
git apply --check change.patch--check는 실제 파일을 바꾸지 않고 적용 가능성을 검사합니다. 같은 파일 이름이어도 패치가 만들어진 원본과 현재 내용이 다르면 hunk가 맞지 않습니다. 이미 적용한 패치를 다시 넣었는지, 반대 방향 패치인지도 확인합니다. 공백을 무시하는 옵션부터 켜면 다른 버전의 코드에 뜻밖의 위치로 들어갈 수 있습니다.
-p는 앞의 경로 구성 요소를 제거합니다
patch --dry-run -p1 < change.patch패치에 a/src/main.c가 있고 작업 디렉터리 아래에 src/main.c가 있다면 -p1은 a/를 제거해 대응시킵니다. -p0은 그 부분을 유지합니다. 어떤 숫자가 맞는지는 패치와 현재 디렉터리의 관계에 따라 정합니다.
- 패치 안의 경로a/src/main.c
- -p1로 앞부분 제거a/ 한 구성 요소를 제거합니다.
- 현재 디렉터리 기준 탐색src/main.c를 찾습니다.
번호는 경로 처리 순서입니다. 파일 내용의 첫 줄을 지운다는 뜻이 아닙니다.
적용 결과도 검토합니다
검사가 성공하면 해당 도구의 실제 적용 명령을 실행한 뒤 git diff로 결과를 확인합니다. patch가 일부만 적용하고 .rej를 남겼다면 전체 성공으로 처리하지 않습니다. 올바른 위치에 적용되었다는 사실과 코드의 의미가 맞는지는 별도로 확인해야 합니다.
vimdiff에서는 ]c와 [c로 차이 사이를 이동합니다. 현재 창에서 dp는 변경을 다른 창으로 보내고 do는 다른 창에서 가져옵니다. 창이 여러 개라면 대상도 구분합니다. zc는 접기 동작이므로 다음 차이로 이동하는 명령이 아닙니다.