Patch 생성
git diff 와 git format-patch 명령어들로 패치 파일을 생성할 수 있습니다. 이 파일은 다른 사람에게 변경 사항을 전달하거나 나중에 적용할 때 사용됩니다.
※ git patch 라는 명령어가 있는 것이 아니다.
1. git diff
현재 작업 중인 변경 사항을 비교하고, 그 차이를 패치 형식으로 출력합니다. git diff > patch.diff
명령을 사용하면, 현재 작업 디렉토리에서의 변경 사항을 patch.diff
라는 파일로 저장할 수 있습니다.
git diff > patch.diff
※ diff 형식
- 두 파일 간의 차이를 나타내는 파일입니다.
- 커밋 메시지나 작성자 정보와 같은 메타데이터는 포함되지 않습니다.
ex)
--- old_file.txt
+++ new_file.txt
@@ -1,4 +1,4 @@
This is a sample file.
-It has some content.
+It has some updated content.
There are several lines here.
The last line stays the same.
2. git format-patch
git format-patch <커밋 해시>..
특정 커밋을 기준으로 패치를 생성하며 mbox 형식의 패치 파일을 생성합니다.
주로 이메일로 다른 개발자에게 패치를 보내거나 다른 브랜치에 변경 사항을 적용하려고 할 때 사용됩니다. 예를 들어, git format-patch HEAD~3
명령은 최근 3개의 커밋을 패치 파일로 생성합니다.
※ mbox 형식
- Git에서는 패치 파일을 이메일로 보내거나 적용할 때 이 형식을 사용
- mbox는 여러 개의 패치를 하나의 파일에 포함시키는 형식
- 헤더 정보(작성자, 날짜, 커밋 메시지 등) + 변경 내용
ex)
From <commit_hash> <date>
From: Author Name <author@example.com>
Date: Thu, 3 Jan 2025 12:00:00 +0000
Subject: [PATCH] Commit message
---
file.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/file.txt b/file.txt
index 5d8f3d9..1d3f7d9 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,2 @@
line 1
line 2
-line 3
+line 3 updated
--
2.34.1
Patch 적용
git apply 와 git am 으로 패치 파일을 적용할 수 있습니다.
1. git apply
패치 파일에 저장된 변경 사항을 현재 작업 디렉토리로 적용
※ 실제로 커밋하지 않고, 단지 워킹 디렉토리와 인덱스(Staging Area)에 변경을 적용하는 데 사용됩니다.
git apply patch.diff
주요 옵션
--3way
옵션: 충돌 발생 시 3-way merge 를 시도.git apply --3way patch.diff
-R 옵션: 패치를 되돌리는 데 사용.
git apply -R patch.diff
2. git am
git am < patch.mbox
이메일 형식으로 작성된 패치 파일을 읽어 변경 사항을 워킹 디렉토리에 적용하며 패치 파일에 포함된 메타데이터(커밋 메시지, 작성자, 날짜 등)를 사용해커밋을 자동으로 생성합니다.
주요 옵션
--3way
옵션: 충돌 발생 시 3-way merge 를 시도.git am --3way < patch.mbox
--abort
옵션: 패치 적용을 취소하고 원래 상태로 되돌림git am --abort
참고
https://hanmailco34.tistory.com/148
https://git-scm.com/docs/git-diff
https://git-scm.com/docs/git-format-patch
https://git-scm.com/docs/git-apply
https://git-scm.com/docs/git-am
'git & github' 카테고리의 다른 글
git hook 정리 (0) | 2025.01.03 |
---|---|
Git Commit 메시지 제대로 작성하기 (0) | 2024.04.24 |
git github 처음부터 다시 배우기 - 6. git hub 활용 (0) | 2023.02.15 |
git github 처음부터 다시 배우기 - 5. git 활용 (0) | 2023.02.13 |
git github 처음부터 다시 배우기 - 3. git 디테일 (0) | 2023.02.13 |