git format-patch로 생성 된 패치를 적용하는 방법은 무엇입니까?


221

동일한 원격 저장소를 가리키는 2 개의 git 로컬 저장소가 있습니다.

하나의 자식 저장소에서 내가 할 경우 git format-patch 1다른 저장소에 해당 패치를 어떻게 적용 할 수 있습니까?

답변:


330

참고 : 먼저 패치가 수행 할 작업을 미리 볼 수 있습니다.

먼저 통계 :

git apply --stat a_file.patch

그런 다음 오류를 감지하는 드라이 런 :

git apply --check a_file.patch

마지막으로 git am패치를 커밋으로 적용 하는 데 사용할 수 있습니다 . 적용된 패치에서 사인 오프 할 수 있습니다.
나중에 참조 할 때 유용 할 수 있습니다.

git am --signoff < a_file.patch 

이 기사예를 참조하십시오 :

자식 로그에서 커밋 메시지에 "Signed-off-by"태그가 포함되어 있음을 알 수 있습니다. 이 태그는 Github과 다른 사람들이 커밋이 코드에서 어떻게 종료되었는지에 대한 유용한 정보를 제공하기 위해 읽 힙니다.

예


9
자기 자신에 대한주의 사항 : 200th Great Answer 금 배지.
VonC

4
git am < somepatch.patch"치명적 : 빈 ID 이름 (<>)이 허용되지 않음"을 생성합니다. 누군가 왜 나에게 설명 할 수 있습니까?
gromit190

@ gromit190 Author은 패치에서 잘못된 헤더 를 의미하며 , 그렇지 않은 경우 git config user.{name,email}입니다.
ulidtko

확인; git apply --check라고 patch does not apply하고 git apply -3말한다 repository lacks the necessary blob to fall back on 3-way merge.커밋을 리베이스하는 그런 바람입니다, 자식에; 그러나 사람들은 어떻게 업데이트 된 코드 위에 패치리베이스 합니까?
ulidtko


163
git apply name-of-file.patch

25
이것은 원래의 자세한 질문에 대답하지 않았을 수도 있지만 제목의 질문에 대답했기 때문에이 페이지에 있습니다. 감사합니다!
Rock Lee

12
나는 이것이 오래된 질문과 대답이라는 것을 이해하지만 git apply와 git am차이점 을 이해하는 것이 도움이 될 수 있다고 생각했습니다 .
mgarey

1
git apply "[... 파일의 전체 경로 ...] / name-of-file.patch"
Anton Lyhin

41

또는 오래된 학교를 차는 경우 :

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
커밋을 만들지 않으므로 커밋 메시지와 작성자 정보가 손실됩니다.
카이사르

22

먼저 와의 차이점 에 대해 메모해야합니다.git amgit apply

사용 git am하는 경우 일반적으로 많은 패치를 적용하고 싶습니다. 따라서 다음을 사용해야합니다.

git am *.patch

또는 그냥 :

git am

힘내 패치를 자동으로 찾아서 순서대로 적용합니다 ;-)

UPD
여기서 이러한 패치를 생성하는 방법을 찾을 수 있습니다


1
이 차이점에 대한 설명은 git apply.. 및 --reverse:-) 을 사용하는 데 도움이되었습니다 .
Jordan Gee


14

JetBrains IDE (예 : IntelliJ IDEA, Android Studio, PyCharm)를 사용하는 경우 패치 파일을 끌어서 IDE 안에 놓으면 패치 내용을 보여주는 대화 상자가 나타납니다. 이제 "Apply patch (패치 적용)"를 클릭하기 만하면 커밋이 생성됩니다.


1
고마워 이것은 모두에게 정말 유용합니다. 허용되는 답변이 있습니다. 그러나 이것은 또한 유용합니다.
Lasitha Benaragama

1
@ambarox 그러나이 대답은 한 번을 downvoted 있었다, 나는 이유를 모르겠어
ice1000

1
누군가 패치를 적용하는 유일한 방법은 명령 줄을 통해서라고 생각할 수도 있습니다. : D 나는 당신에게 공감대를 주었다. 힘내 친구 야.
Lasitha Benaragama

1
@LasithaBenaragama-종류의. SO는 OP뿐만 아니라 따르는 모든 사람들을 돕기 위해 만들어졌습니다. 이 답변은 유용하지만 일반적인 솔루션을 제공하지는 않습니다. 이것은 훌륭한 작은 블로그 게시물을 만들지 만 "SO good"답변은 아닙니다. downvote를 설명 할 것입니다!
OldTinfoil

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.