답변:
시험:
git format-patch -1 <sha>
또는
git format-patch -1 HEAD
위의 문서 링크에 따르면, -1
플래그는 git에게 패치에 얼마나 많은 커밋을 포함시켜야하는지 알려줍니다.
-<n>
최상위 커밋에서 패치를 준비하십시오.
다음 명령으로 패치를 적용하십시오.
git am < file.patch
git am --keep-cr < mypatch.patch
git format-patch -1 <sha> path/to/file.js
이렇게하면 file.js의 diff 만 포함하는 패치가 만들어집니다.
특정 sha1 해시에서 최상위 커밋에서 패치를 생성하는 경우 :
git format-patch -<n> <SHA1>
단일 패치 파일에서 헤드의 마지막 10 개 패치 :
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
git format-patch -1 HEAD
가장 최근의 패치를 생성합니다 커밋
-2
대부분의 최근 2 커밋을 위해이 패치를 생성하고, 설명이 명령이기 때문에 한가지 더 got format-patch -2 HEAD
라인과 동일git format-patch HEAD~2
커밋 1 후에 커밋 ID 2가 있다고 가정하면 다음을 실행할 수 있습니다.
git diff 2 1 > mypatch.diff
여기서 2와 1은 SHA 해시입니다.
git diff hash^ hash
. "hash ^"는 선행 커밋을 제공합니다. (물론 manojlds의 답변이 더 낫습니다)
git show HEAD > mypatch.diff
커밋하는 동안 똑같이해야합니다.
git diff 1 2
이 명령은 이미 @ Naftuli Tzvi Kay가 제안한대로 :
git format-patch -1 HEAD
바꾸다 HEAD
특정 해시 또는 범위로 .
UNIX 편지함 형식과 유사한 형식으로 최신 커밋에 대한 패치 파일을 생성합니다.
-<n>
-최상위 커밋에서 패치를 준비하십시오.
그런 다음 다음을 통해 패치 파일을 메일 박스 형식으로 다시 적용 할 수 있습니다.
git am -3k 001*.patch
참조 : man git-format-patch
.
git
적어도 사용자가 올바른 방식으로 적용하면 다른 형식의 패치와는 다릅니다 .
-k
플래그 ( git am -3
)를 남겨두면 이 양식을 수정했습니다 ( PATCH[0/10]
커밋 메시지 없음 ). 힘내 버전 2.20.1.windows.1
특정 커밋 위에 (싱글 커밋) 패치가 적용되도록하려면 새로운 git 2.9 (2016 년 6 월) 옵션을 사용할 수 있습니다 git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
참조 bb52995 커밋 , 3de6651 커밋 , fa2ab86 커밋 , 커밋 ded2c09 에 의해 (2016 4월 26일) Xiaolong 예 (``) .
( Junio C gitster
Hamano 에 의해 병합 -- 커밋 72ce3ff , 2016 년 5 월 23 일)
format-patch
:--base
기본 트리 정보를 기록하려면 ' '옵션 추가관리자 또는 타사 테스터는 패치 시리즈가 적용되는 정확한 기본 트리를 알고 싶어 할 수 있습니다. 가르쳐 git format-patch '
--base
'옵션을 가르쳐서 기본 트리 정보를 기록하고 첫 번째 메시지의 끝 (표지 또는 시리즈의 첫 번째 패치)에 추가하십시오.기본 트리 정보는 "기타 커밋"으로, 모든 사람이 작업을 수행하는 프로젝트 히스토리의 안정적인 부분의 일부인 잘 알려진 커밋과 잘 알려진 "전제 조건 패치"로 구성됩니다. 패치가 적용되기 전에 아직 "기본 커밋"의 일부가 아닌 "베이스 커밋"의 위상이 "순서 커밋"위에 적용되는 패치.
"기본 커밋"은 "
base-commit:
"다음에 커밋 개체 이름의 40 진수로 표시됩니다.
"전제 조건 패치"는 ""로 표시되고prerequisite-patch-id:
그 뒤에 40 "헥스"패치 ID "가 표시되며 "git patch-id --stable
"명령을 통해 패치를 전달하면 얻을 수 있습니다 .
Git 2.23 (Q3 2019)은 " --base
"옵션이 " format-patch
" patch-ids
전제 조건 패치를 불안정한 방식으로 계산하여 " git patch-id --stable
" 과 호환되는 방식으로 계산되도록 업데이트 되었기 때문에 개선 될 것입니다 .
Stephen Boyd ( )의 commit a8f6855 , commit 6f93d26 (2019 년 4 월 26 일)을 참조하십시오 . ( Junio C Hamano 에 의해 병합 -- 커밋 8202d12 , 2019 년 6 월 13 일)akshayka
gitster
format-patch
:--base patch-id
출력을 안정적으로 만듭니다.의
patch-id
생성 코드에서 덩어리를 처리 할 때마다 컨텍스트를 비우지diff.c
않았지만 'patch-id
'도구를 사용하여 "안정한"patch-id를 생성 할 때이를 수행했습니다 .하자의 포트 유사한 논리 그 이상에서
patch-id.c
에diff.c
우리가 같은 해시를 얻을 수 있도록하는 경우 '에 대한 우린 발생 패치-IDSformat-patch --base=
명령 호출의 유형'.
Git 2.24 (2019 년 4 분기) 이전에 " git format-patch -o <outdir>
"는 " mkdir <outdir>
"not "mkdir -p <outdir>
" .
Bert Wesarg ( )의 commit edefc31 (2019 년 10 월 11 일)을 참조하십시오 . (의해 병합 Junio C 하마노 - - 에 커밋 f1afbb0 18 시월 2019)bertwesarg
gitster
format-patch
: 출력 디렉토리의 주요 구성 요소 작성서명자 : Bert Wesarg
'git format-patch -o'는 수정중인 'mkdir -p'가 아닌 'mkdir'에 해당합니다.
adjust_shared_perm
보안에 영향을 줄 수있는 주요 디렉토리에서 ' '를 사용하지 마십시오 . 'config.sharedRepository
'like 'git init
' 를 일시적으로 사용 중지하여 달성합니다 .
Git 2.25 (Q1 2020)에서는 " git rebase
"가 제대로 작동하지 않을 때format.useAutoBase
구성 변수가 설정되어 수정 된 .
참조 cae0bc0 커밋 , 945dc55 커밋 , 700e006 커밋 , a749d01 커밋 , 0c47e06 커밋 에 의해 (2019 12월 4일) 덴튼 리우 ( Denton-L
) .
( Junio C gitster
Hamano 에 의해 병합 -- 커밋 71a7de7 , 2019 년 12 월 16 일)
rebase
:format.useAutoBase
파손 수정보고자 : Christian Biesinger
서명자 : Denton Liu로
format.useAutoBase = true
rebase를 실행하면 오류가 발생했습니다.fatal: failed to get upstream, if you want to record base commit automatically, please use git branch --set-upstream-to to track a remote branch. Or you could specify base commit by --base=<base-commit-id> manually error: git encountered an error while preparing the patches to replay these revisions: ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12 As a result, git cannot rebase them.
--no-base
rebase에서 format-patch 로 항상 전달하여이 효과를 무시하도록 수정하십시오format.useAutoBase
.
특정 SHA1에 대해서만 패치를 생성하는 방법은 무엇입니까?
아주 간단합니다 :
옵션 1. git show commitID > myFile.patch
옵션 2. git commitID~1..commitID > myFile.patch
참고 : commitID
실제 커밋 ID (SHA1 커밋 코드)로 바꾸십시오.
git apply --stat file.patch
# show stats.git apply --check file.patch
# 적용하기 전에 오류를 확인하십시오.git am < file.patch
# 마지막으로 패치를 적용하십시오.