git diff 파일을 가져 와서 동일한 리포지토리의 복사본 인 로컬 브랜치에 어떻게 적용합니까?


491

동료가 만든 .diff 파일이 있는데 해당 diff 파일에 나열된 변경 사항을 정확히 동일한 리포지토리의 로컬 지점에 적용하고 싶습니다. 이 diff 파일을 생성하는 데 사용 된 해당 작업자의 PC 또는 지점에 액세스 할 수 없습니다.

분명히 나는 ​​한 줄씩 가서 모든 것을 다시 입력 할 수는 있지만 시스템에 인간의 실수가 적용되지는 않을 것입니다. 가장 쉬운 방법은 무엇입니까?

답변:


746

diff 파일을 저장소의 루트에 복사 한 후 다음을 수행하십시오.

git apply yourcoworkers.diff

apply명령 에 대한 자세한 내용은 해당 매뉴얼 페이지를 참조하십시오 .

그건 그렇고 : 파일로 전체 커밋을 교환하는 더 좋은 방법 git format-patch은 보낸 사람과 수신자 의 명령 을 결합하는 것입니다.이 방법은 작성자 git am정보와 커밋 메시지를 전송하기 때문입니다.

패치 응용 프로그램이 실패하고 diff가 생성 된 커밋이 실제로 리포지토리에있는 경우 해당 -3옵션을 사용 apply하여 변경 사항을 병합 할 수 있습니다 .

또한 다음과 같이 Unix 파이프와 함께 작동합니다.

git diff d892531 815a3b5 | git apply

3
답장을 보내 주셔서 감사하지만 패치가 실패했습니다 : filename.php : 202 error : filename.php : 패치가 적용되지 않습니다. 좋은 소식은 파일의 첫 번째 파일 이름이 아니기 때문에 적어도 일부 파일을 처리 할 수 ​​있었을 것입니다. 이견있는 사람?
Mike_K

4
패치가 작동하지 않도록 해당 파일을 변경 한 것 같습니다. 이 문제를 해결하려면 변경 사항을 커밋하고 새 브랜치를 만들고 동료와 분기 된 커밋으로 재설정하고 패치를 적용한 다음 커밋 한 다음 두 브랜치를 병합하십시오.
Philipp

3
@orlybg 아직 커밋하지 않은 경우 git reset --hard작업 트리를 마지막 커밋으로 되 돌리십시오. 이미 커밋 한 경우 되돌리려는 개정을 추가하십시오.
Philipp

5
@orlybg 미안하지만, 당신은 망했다. Git은 커밋 할 때 반환 할 수있는 체크 포인트 만 만듭니다. 그렇기 때문에 많은 git guides가 자주 커밋하는 것이 좋습니다 .
Philipp

4
@orlybg는 적어도 git stash되돌릴 수있는 작업을 수행하기 전에 실행하십시오 . 어느 쪽이든, 당신은 당신의 은신처를 되 찾을 수 있고 나중에 언젠가 커밋 할 수 있습니다.
모리스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.