development

현재 작업 디렉토리의 변경 사항에서 git 패치를 만듭니다.

big-blog 2020. 9. 29. 08:01
반응형

현재 작업 디렉토리의 변경 사항에서 git 패치를 만듭니다.


내 작업 디렉토리에 커밋되지 않은 변경 사항이 있다고 가정합니다. 커밋을 만들지 않고도 패치를 만들 수 있습니까?


git diff무단계 변경. git diff --cached단계적 변경.


아직 변경 사항을 커밋하지 않은 경우 :

git diff > mypatch.patch

그러나 때때로 당신이하는 일의 일부가 추적되지 않고 git diff출력에 포함 되지 않는 새로운 파일 인 경우가 있습니다 . 따라서 패치를 수행하는 한 가지 방법은 새 커밋 ( git add각 파일 또는 git add .)을 위해 모든 것을 준비 하지만 커밋을 수행하지 않고 다음을 수행하는 것입니다.

git diff --cached > mypatch.patch

패치에 바이너리 파일 (예 : mp3 파일)을 추가하려면 'binary'옵션을 추가하십시오.

git diff --cached --binary > mypatch.patch

나중에 패치를 적용 할 수 있습니다.

git apply mypatch.patch

참고 : --staged의 동의어로 사용할 수도 있습니다 --cached.


git diffgit apply텍스트 파일을 작동하지만 바이너리 파일에 대해 작동하지 않습니다.

전체 바이너리 패치를 쉽게 만들 수 있지만 임시 커밋을 만들어야합니다. 임시 커밋을 완료하면 다음을 사용하여 패치를 만들 수 있습니다.

git format-patch <options...>

패치를 만든 후 다음 명령을 실행하십시오.

git reset --mixed <SHA of commit *before* your working-changes commit(s)>

이것은 임시 커밋을 롤백합니다. 최종 결과는 원래 변경 사항과 동일한 변경 사항으로 인해 작업 복사본 (의도적으로)이 더러워집니다.

수신 측에서는 커밋 기록없이 동일한 트릭을 사용하여 작업 복사본에 변경 사항을 적용 할 수 있습니다. 간단히 패치를 적용하고 git reset --mixed <SHA of commit *before* the patches>.

이 전체 옵션이 작동하려면 잘 동기화되어야 할 수도 있습니다. 패치를 만드는 사람이 내가 가졌던 것만 큼 많이 변경하지 않았을 때 패치를 적용 할 때 몇 가지 오류를 보았습니다. 작동하도록하는 방법이있을 수 있지만 자세히 살펴 보지 않았습니다.


Tortoise Git에서 동일한 패치를 만드는 방법은 다음과 같습니다 (해당 도구 사용을 권장하지 않음).

  1. 작업 변경 사항 커밋
  2. 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 Tortoise Git->Create Patch Serial
    1. 의미가있는 범위를 선택하십시오 ( Since: FETCH_HEAD동기화가 잘되면 작동 함).
    2. 패치 생성
  3. 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 Tortise Git->Show Log
  4. 임시 커밋 전에 커밋을 마우스 오른쪽 버튼으로 클릭하고reset "<branch>" to this...
  5. 선택 Mixed옵션을

그리고 그것들을 적용하는 방법 :

  1. 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 Tortoise Git->Apply Patch Serial
  2. 올바른 패치를 선택하고 적용하십시오.
  3. 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 Tortise Git->Show Log
  4. 패치의 커밋 전에 커밋을 마우스 오른쪽 버튼으로 클릭하고reset "<branch>" to this...
  5. 선택 Mixed옵션을

수정 된 파일과 새 파일 (스테이징)이 모두 포함 된 패치를 만들려면 다음을 실행할 수 있습니다.

git diff HEAD > file_name.patch

나는 좋아한다 :

git format-patch HEAD~<N>

여기서 <N>패치로 저장하는 마지막 커밋의 수입니다.

명령 사용 방법에 대한 자세한 내용은 DOC에 있습니다.

UPD
여기서 적용 방법을 찾을 수 있습니다.

UPDformat-patch
별칭 추가에 대한 아이디어를 얻지 못한 사람들을 위해 :

git config --global alias.make-patch '!bash -c "cd ${GIT_PREFIX};git add .;git commit -m ''uncommited''; git format-patch HEAD~1; git reset HEAD~1"'

그런 다음 프로젝트 저장소의 디렉토리에서 다음을 실행하십시오.

git make-patch

이 명령은 0001-uncommited.patch현재 디렉토리에 생성 됩니다. 패치에는 다음 명령에 표시되는 모든 변경 사항과 추적되지 않은 파일이 포함됩니다.

git status .

바이너리를 수행 --binary하려면 실행할 때 옵션을 제공하십시오 git diff.

참고URL : https://stackoverflow.com/questions/5159185/create-a-git-patch-from-the-changes-in-the-current-working-directory

반응형