[GIT] Patch 파일 생성 및 적용하기(Apply, am)

Patch 파일 생성하기

  • git diff 명령어로 생성하기
    • 파일을 수정하고 나서 git diff 명령어를 입력합니다.
    • # 1.txt 파일 안에 있는 내용을 변경합니다.
      $ git diff > 1.patch
      $ cat 1.patch
      ----------------------------------------
      diff --git a/1.txt b/1.txt
      index f937f7e..1747edd 100644
      --- a/1.txt
      +++ b/1.txt
      @@ -1 +1 @@
      -233
      \ No newline at end of file
      +233555
      \ No newline at end of file
  • git format-patch로 생성하기
    • 파일 수정 후 커밋까지 한 상태에서 git format-patch 명령어를 입력합니다.
    • # 커밋 후
      $ git format-patch -M 리모트/브랜치
    • patch 파일이 생깁니다. 커밋 로그도 기록되어 있어서 나중에 패치 작업을 하고 git log에서 author이 누구인지 알 수 있습니다.

Patch 파일 적용하기

  • git aaply
    • $ git apply 패치파일
    • 파일 추가, 삭제, 이름 변경과 같은 변경 내용을 자동으로 처리해서 리눅스 patch 명령보다 꼼꼼하게 비교합니다.
    • Patch를 적용하는데 실패하면 변경 사항을 이전 상태로 롤백합니다.
    • --check를 이용하여 테스트할 수 있습니다.
    • $ git apply --check 패치파일
    • 에러가 발생하지 않으면 Patch가 깔끔하게 적용된 것입니다.
    • 자동 커밋되지 않기 때문에 staging area에 추가하고 커밋해야 합니다.
  • git am
    • format-patch 명령으로 생성한 파일은 mbox 이메일 형식이라서 am 명령어로 patch할 수 있습니다.
    • patch에 성공을 하면 새로운 커밋이 하나 만들어집니다.
    • patch에 실패를 하면 사용자에게 어떻게 처리할지 물어옵니다.
    • 충돌된 파일을 수정 후 staging area에 추가 후 git am --resolved 명령어를 통해서 해결합니다.
    • -3 옵션을 사용하여 3-way patch를 시도할 수 있습니다. 같은 프로젝트의 커밋이라면 훨씬 더 수월하게 충돌 상황을 해결합니다.
    • -i 옵션을 통해 대화형 방식을 사용할 수 있습니다.