나는 매우 간단한 것을하고 있습니다. 일반 패치 파일을 준비하려고하므로 몇 가지 변경 사항을 다시 적용 할 수 있습니다.
$ git diff > before
$ git diff something_here > save.patch
$ git checkout .
$ patch < save.patch
$ git diff > after
$ diff before after
$
함께 something_here
빈 거의 작동하지만 파일 이름은 잘하지 않습니다. 옵션이 누락 된 것 같습니다.
실제로는 결제 후 병합을 수행 할 예정이므로 패치가 실패 할 수 있지만 내가 뭘 받고 있는지 알 수 있습니다.
잘못된 질문을하기 위해 여기에서 내 잘못을 편집 하십시오. 실제 질문은 변경 사항을 저장하고 병합하고 가능한 경우 변경 사항을 다시 적용하고 싶습니다. 패치를 사용하여 이러한 종류의 문제를 해결하는 데 익숙해 졌기 때문에 잘못된 방법으로 물어 git diff
보았습니다.
Charles Bailey의 의견 에는 정답이 있습니다. 저에게는 git-apply가 올바른 일입니다 (git-stash는 내가 필요로하는 것보다 더 무겁게 보이고 rebasing하고 번들은 확실히 현재 기술 수준을 넘어서는 것입니다.) Charles가 보낸 대답을 받아 들일 것입니다. 댓글을 수락 할 수 없습니다). 모든 제안에 감사드립니다.
6 년 후 편집
이 주제에 익숙한 사람이 알고 있듯이의 어려움을 과대 평가했습니다 git stash
. 거의 매일 정도, 나는 다음 순서를 사용합니다 :
$ git stash
$ git merge
$ git stash pop
답변
패치를 사용하려면 a/
b/
git이 기본적으로 사용 하는 접두사 를 제거해야합니다 . --no-prefix
옵션을 사용 하여이 작업을 수행 할 수 있습니다 (패치 -p
옵션을 사용 하여 수행 할 수도 있음 ).
git diff --no-prefix [<other git-diff arguments>]
일반적으로 스트레이트 git diff
를 사용하고 출력을 사용하여 피드 하는 것이 더 쉽습니다 git apply
.
대부분 텍스트 패치를 사용하지 않으려 고합니다. 일반적으로 하나 이상의 임시 커밋이 rebase와 결합되어 git stash
번들이 관리하기가 더 쉽습니다.
귀하의 유스 케이스에는 이것이 stash
가장 적절 하다고 생각합니다 .
# save uncommitted changes
git stash
# do a merge or some other operation
git merge some-branch
# re-apply changes, removing stash if successful
# (you may be asked to resolve conflicts).
git stash pop
답변
그냥 사용 -p1
: 당신이 사용해야합니다 -p0
에 --no-prefix
그냥 떠날 수 있도록, 어쨌든 케이스 --no-prefix
및 사용을 -p1
:
$ git diff > save.patch
$ patch -p1 < save.patch
$ git diff --no-prefix > save.patch
$ patch -p0 < save.patch
답변
git diff에는 파일 경로 앞에 추가 경로 세그먼트가 있습니다. 패치와 함께 -p1을 지정하여 경로에서이 항목을 제거 할 수 있습니다.
patch -p1 < save.patch
답변
- 현재 HEAD에 대해 현재 디렉토리 (커밋되지 않은 파일 포함)의 diff를 저장합니다.
- 그런 다음
save.patch
파일을 이진 파일을 포함한 모든 위치로 전송할 수 있습니다 . - 대상 컴퓨터에서 다음을 사용하여 패치를 적용하십시오.
git apply <file>
참고 : 현재 준비된 파일도 다릅니다.
$ git diff --binary --staged HEAD > save.patch
$ git reset --hard
$ <transport it>
$ git apply save.patch
답변
임시 패치 파일 생성을 피하는 유용한 방법 :
git diff | patch -p1 -d [dst-dir]