현재 작업 디렉토리의 변경 사항에서 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 diff
및 git 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에서 동일한 패치를 만드는 방법은 다음과 같습니다 (해당 도구 사용을 권장하지 않음).
- 작업 변경 사항 커밋
- 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고
Tortoise Git
->Create Patch Serial
- 의미가있는 범위를 선택하십시오 (
Since
:FETCH_HEAD
동기화가 잘되면 작동 함). - 패치 생성
- 의미가있는 범위를 선택하십시오 (
- 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고
Tortise Git
->Show Log
- 임시 커밋 전에 커밋을 마우스 오른쪽 버튼으로 클릭하고
reset "<branch>" to this...
- 선택
Mixed
옵션을
그리고 그것들을 적용하는 방법 :
- 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고
Tortoise Git
->Apply Patch Serial
- 올바른 패치를 선택하고 적용하십시오.
- 브랜치 루트 디렉토리를 마우스 오른쪽 버튼으로 클릭하고
Tortise Git
->Show Log
- 패치의 커밋 전에 커밋을 마우스 오른쪽 버튼으로 클릭하고
reset "<branch>" to this...
- 선택
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
.
'development' 카테고리의 다른 글
BOM이없는 UTF-8과 UTF-8의 차이점은 무엇입니까? (0) | 2020.09.29 |
---|---|
Unix 도구로 JSON 구문 분석 (0) | 2020.09.29 |
Android "뷰 계층 구조를 생성 한 원래 스레드 만 뷰를 터치 할 수 있습니다." (0) | 2020.09.28 |
노드 js에서 npm 모듈을 제거하는 방법은 무엇입니까? (0) | 2020.09.28 |
Bash 함수에 매개 변수 전달 (0) | 2020.09.28 |