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.