Git에서 패치를 생성하고 적용하는 방법
패치는 리포지토리 간의 변경 사항을 일반 텍스트 파일로 전달합니다. 다음은 git diff 또는 git format-patch 사용 시기, git apply 또는 git am 사용 시기, 적용을 거부하는 패치 수정 방법입니다.
작성자: Kodmora
GitTree 뒤에 있는 소프트웨어 하우스
- 커밋
- 리모트 및 푸시
이 페이지에서
패치를 생성하려면 커밋되지 않은 변경 사항에 대해 `git diff > fix.patch`을 실행하거나 마지막 커밋에 대해 `git format-patch -1 HEAD`를 실행하세요. 적용하려면 `git apply fix.patch` 또는 `git am 0001-my-change.patch`을 실행하세요. 작업 폴더에만 변경 사항을 적용하려면 git apply를 사용하세요. 메시지와 작성자가 포함된 원본 커밋을 원할 경우 git am를 사용하세요.
Git 패치란 무엇입니까?
패치는 어떤 줄을 제거하고 어떤 파일에 추가할지 나열하는 텍스트 파일입니다. 이메일로 수정 사항 보내기, 관련 없는 저장소 간에 변경 사항 이동, 버전 제어 외부에 로컬 변경 사항 유지 등 동일한 원격 저장소로 푸시할 수 없는 경우에 적합합니다. 귀하와 다른 사람이 원격 저장소를 공유하면 분기가 더 간단해집니다.
커밋되지 않은 변경 사항에서 패치를 어떻게 생성합니까?
# unstaged changes
git diff > fix.patch
# staged changes
git diff --staged > fix.patch
# everything since the last commit
git diff HEAD > fix.patch
# include binary files
git diff --binary > fix.patch준비되지 않은 새 파일은 git diff에 표시되지 않습니다. 먼저 git add을 실행하고 --staged를 사용하세요.
커밋에서 패치를 어떻게 생성하나요?
# the last commit
git format-patch -1 HEAD
# the last three commits, one file each
git format-patch -3
# everything on this branch that main does not have
git format-patch main..feature/search -o patches/
# all of it in a single file
git format-patch main --stdout > feature.patchformat-patch는 0001-add-search-box.patch과 같은 이름의 파일을 작성합니다. 각각은 일반 git diff이(가) 손실되는 커밋의 메시지, 작성자 및 날짜를 유지합니다.
패치를 어떻게 적용하나요?
먼저 확인해보세요. 이 두 명령은 아무것도 변경하지 않습니다.
# what it touches
git apply --stat fix.patch
# whether it will apply
git apply --check fix.patch그런 다음 필요한 방식으로 적용하십시오.
# into the working folder, nothing staged
git apply fix.patch
# into the working folder and the staging area
git apply --index fix.patch
# as commits, with their messages and authors
git am patches/*.patchgit Apply와 git am의 차이점은 무엇입니까?
git apply | git am | |
|---|---|---|
| 읽기 | 모든 차이점 | git format-patch의 파일 또는 편지함 |
| 결과 | 변경된 파일, 커밋 없음 | 패치당 하나의 커밋 |
| 메시지와 작성자를 유지합니다. | 아니요 | 예 |
| 실패 시 | 기본적으로 아무것도 적용되지 않습니다. | 정류장; 계속하거나 git am --abort |
"패치가 적용되지 않음"을 어떻게 수정합니까?
error: patch failed: src/search.ts:14
error: src/search.ts: patch does not apply패치가 만들어진 이후 파일이 변경되었으므로 해당 컨텍스트 줄이 더 이상 일치하지 않습니다. 다음을 순서대로 시도해 보세요.
git apply --3way fix.patch는 원본 blob을 사용하여 병합하고 일반적인 충돌 마커를 남깁니다. 저장소에 해당 blob이 필요합니다.git apply --whitespace=fix fix.patch는 공백이나 줄 끝만 다른 경우에 도움이 됩니다.git apply --reject fix.patch는 가능한 것을 적용하고 사용자가 직접 수행할 수 있도록 실패한 부분을.rej파일에 기록합니다.- 패치가 만들어진 커밋을 확인하고 거기에 적용한 다음 리베이스하세요.
git am의 경우 git am --3way을 사용하여 충돌을 해결하고 git add 파일을 실행한 후 git am --continue을 실행합니다. 취소하려면 병합 또는 리베이스를 중단하는 방법에 나열된 대로 git am --abort를 실행하세요.
패치를 취소하려면 어떻게 해야 하나요?
git apply -R fix.patch-R는 패치를 역방향으로 적용합니다. git am을 사용한 경우 커밋은 일반 커밋이므로 `git reset` 또는 `git revert`를 사용하여 실행 취소합니다.
GitTree에서 패치를 생성하고 적용하는 방법
패치 저장
커밋을 마우스 오른쪽 버튼으로 클릭하고 복사를 연 다음 커밋에서 패치 만들기...를 엽니다. Create Patch from Commits...에서 여러 커밋을 선택하거나 Create Patch from File Changes...에서 변경된 파일을 마우스 오른쪽 버튼으로 클릭합니다.
패치 적용
명령 팔레트에서 Apply Patch…를 실행하고 파일을 선택합니다. GitTree는 보유하고 있는 파일 및 커밋 수와 바이너리 변경 사항을 포함하는지 여부를 나타냅니다.
적용 방법을 선택하세요.
적용 대상에서 작업 트리만(
git apply), 작업 트리 및 변경 사항 준비(git apply --index) 또는 현재 분기의 커밋으로(git am)를 선택한 다음 적용을 누릅니다.

패치 생성 및 적용 가이드에는 모든 옵션이 나열되어 있습니다.
자주 묻는 질문
git diff와 git format-patch의 차이점은 무엇입니까?
git diff는 변경 사항만 기록합니다. git format-patch는 메시지, 작성자 및 날짜가 포함된 커밋당 하나의 파일을 작성하므로 git am가 커밋을 다시 생성할 수 있습니다.
git Apply가 커밋을 생성하나요?
아니요. 파일만 변경됩니다. 검토한 후 평소처럼 커밋하세요. 커밋을 얻으려면 git am를 사용하세요.
GitHub의 패치를 어떻게 적용합니까?
GitHub의 커밋 또는 풀 요청 URL 끝에 .patch를 추가하고 파일을 다운로드한 후 git am을 실행하세요.
패치에 바이너리 파일이 포함될 수 있습니까?
예, git diff --binary을(를) 사용하여 생성하면 가능합니다. git format-patch에는 기본적으로 바이너리 변경 사항이 포함됩니다.
패치보다 체리픽이 더 나은가요?
두 커밋이 모두 하나의 저장소에 있거나 가져온 원격에 있으면 예: `git cherry-pick`가 더 짧고 소스 커밋을 추적합니다. 패치는 저장소가 서로 연결할 수 없는 경우에 사용됩니다.
출처
다른 제품에 대한 주장은 2026년 11월 7일의 공식 페이지에서 확인되었습니다. 가격과 기능은 변경됩니다. 공급업체 페이지가 진실의 원천입니다.
