숨겨둔 내용으로 패치를 포맷하는 방법


140

자식에서는 변경 사항을 숨 깁니다. 숨겨둔 부분으로 패치를 만들 수 있습니까? 그런 다음 다른 저장소 (동료)에 패치를 적용 하시겠습니까?

나는 알고 git format-patch -1있지만 그것이 내가 저지른 것을위한 것이라고 생각한다. 그러나 나는 숨겨둔 변화에 대해 같은 것을 찾고 있습니다.

다른 저장소에 패치를 어떻게 적용 할 수 있습니까?

답변:


156

물론, git stash show이것을 지원합니다 :

git stash show -p

따라서 사용

git stash list

패치로 내보내려는 숨김 수를 확인한 다음

git stash show -p stash@{<number>} > <name>.patch

그것을 수출하십시오.

예를 들면 다음과 같습니다.

git stash show -p stash@{3} > third_stash.patch

1
패치 적용에 대한 관련 질문이 있습니다. 패치가 여러 파일에 닿았다고 가정하겠습니다. 패치를 '대화식으로'적용하는 방법이 있습니까? 패치를 적용 할 패치 파일을 선택하십시오. 내가 할 수 있습니까?
silverburgh

1
@silverburgh : 살펴 보았고 man patch대화식 패치 응용 프로그램에 대한 옵션을 보지 못했습니다. 그러나 패치 파일은 일반 텍스트 파일 자체이므로 일반적으로 적용 할 작업은 텍스트 편집기에서 패치를 편집하여 적용 할 관련 부분을 잘라내는 것 patch입니다. 또는 패치를 다른 Git 리포지토리에 적용하는 경우 패치를 모두 적용한 다음 git checkout변경하지 않으려는 파일 을 선택적으로 적용 할 수 있습니다 git checkout.
Greg Hewgill

1
@silverburgh git apply의 "--exclude"및 "--include"매개 변수를 사용하여 패치 된 파일 세트를 제한 할 수 있습니다.
Kelvin

@silverburgh 다음 패치를 가지고 있다고 가정 할 수 있습니다. 패치를 완전히 적용한 다음 수행 git add --interactive ${YOUR_FILES}하면 부분적으로 커밋 할 수 있습니다.
Alex

15
감사. git stash show -p stash@{1} > patch.txt
Ryan

63

이 답변은 패치를 저장하고 사용하려는 곳에 적용하는 방법에 대한 정보를 제공합니다.

파일에서 출력을 숨기려면 다음을 수행하십시오.

 git stash show -p --color=never > my-patch-name.patch

패치가 양호한 지 확인하십시오.

git apply --stat my-patch-name.patch

오류가 없는지 확인하십시오.

git apply --check my-patch-name.patch

패치 적용

git apply my-patch-name.patch

이것은 일반 텍스트 코드 파일로 나를 위해 일했지만 공백을 고려해야했습니다. 패치가 git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patchgit apply --ignore-space-change --ignore-whitespace my-patch-name.patch
Craig Boland

좋고 간결한 설명. 그것이 효과를 발휘하기 위해서는 패치를 적용 할 때 레포 루트에 있어야했습니다. 그렇지 않으면 git applydiff를 선택하지 않았습니다.
Max

16

사용하다

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

최근에 보관 한 물건의 목록을 얻을 수 있습니다. Git은 실제로 숨길 때 커밋 객체를 만듭니다.

그들은 다른 모든 것처럼 커밋됩니다. 지점에서 확인할 수 있습니다.

$> git checkout -b with_stash stash@{0}

그런 다음이 지점을 게시하면 동료가 해당 커밋을 병합 또는 체리 픽 (pick-pick) 할 수 있습니다.


13

위의 솔루션은 이진 데이터에는 작동하지 않습니다. 다음은 이에 대한 지원을 추가합니다.

git stash show stash@{0} -p --binary

편집하다

참고 : 위의 답변에 의견을 추가하고 싶었지만 평판이 충분하지 않습니다.


3

나는 이것이 최근 Git의 멍청한 짓 중 하나라고 생각합니다. 더 이상 숨겨둔 변경 사항을 패치하지 않아도됩니다. 한 지점의 숨김 변경 사항을 다른 지점에 적용하면됩니다.

지점 A에서 stash @ {1}이라고하는 일부 변경 사항을 제거했습니다.

이제 지점 B로 전환하면됩니다.

$git stash apply stash@{1}

이것은 분기 A 변경 사항을 분기 B에 적용합니다.

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