Programing

git-diff에서 패치 호환 출력을 얻을 수 있습니까?

lottogame 2020. 6. 10. 23:06
반응형

git-diff에서 패치 호환 출력을 얻을 수 있습니까?


나는 매우 간단한 것을하고 있습니다. 일반 패치 파일을 준비하려고하므로 몇 가지 변경 사항을 다시 적용 할 수 있습니다.

$ 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

  1. 현재 HEAD에 대해 현재 디렉토리 (커밋되지 않은 파일 포함)의 diff를 저장합니다.
  2. 그런 다음 save.patch파일을 이진 파일을 포함한 모든 위치로 전송할 수 있습니다 .
  3. 대상 컴퓨터에서 다음을 사용하여 패치를 적용하십시오. 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]

참고 : https://stackoverflow.com/questions/4610744/can-i-get-a-patch-compatible-output-from-git-diff

반응형