특정 커밋용 Git 패치를 생성하려면 어떻게 해야 합니까?
SHA-1 커밋 번호 목록용 패치를 작성하는 스크립트를 작성해야 합니다.
는 는는그용사 i를 사용해 보았다.git format-patch <the SHA1>, 이 값 이후 각 수백 개의 패치가 생성된 후 프로세스를 종료해야 했습니다.
특정 SHA-1 값에 대해서만 패치를 생성하는 방법이 있습니까?
시험:
git format-patch -1 <sha>
또는
git format-patch -1 HEAD
" " "는-1.
- <n>
최상위 커밋에서 패치를 준비합니다.
다음 명령을 사용하여 패치를 적용합니다.
git am < file.patch
또, 다음의 방법으로 신청(Windows 를 포함한 모든 OS 로 동작할 필요가 있습니다)할 수도 있습니다.
git apply --verbose file.patch
-v ★★★★★★★★★★★★★★★★★」--verbose실패한 항목이 있으면 표시합니다.고치는 방법에 대한 힌트를 주고 있습니다.
특정 SHA-1 해시에서 최상위 <n> 커밋에서 패치를 생성하는 경우:
git format-patch -<n> <SHA-1> --stdout > <name_of_patch_file>.patch
1개의 패치파일 내의 마지막 10개의 패치:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
commit 1 뒤에 commit id 2가 있다고 가정하면 다음과 같이 실행할 수 있습니다.
git diff 2 1 > mypatch.diff
여기서 2와 1은 SHA-1 해시입니다.
이 명령어(@나프툴리쯔비 Kay에서 이미 제안했듯이)
git format-patch -1 HEAD
HEAD이치
는, UNIX 메일 박스 형식과 같은 포맷의 최신 커밋용 패치 파일을 생성합니다.
-<n>맨의 <합니다.- <n> 커밋에서 패치를 준비합니다.
다음으로 패치 파일을 우편함 형식으로 다시 적용할 수 있습니다.
git am -3k 001*.patch
를 참조해 주세요.
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
빠르고 심플한 솔루션.
커밋 커밋) (을 사용할 수 .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
"commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (2016년 4월 26일)" by Xiaolong Ye(')를 참조하십시오.
(2016년 5월 23일, Junio C Hamano에 의해 합병----commit 72ce3ff,
format-patch'를 추가합니다.--basetree " " ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' "
유지보수 담당자 또는 서드파티 테스터는 패치 시리즈가 적용되는 정확한 기본 트리를 알고 싶을 수 있습니다. 주세요.git'입니다.
--base기본 트리 정보를 기록하고 첫 번째 메시지 끝에 추가합니다(커버 레터 또는 시리즈의 첫 번째 패치).기본 트리 정보는 '기본 커밋'으로 구성되어 있습니다.기본 커밋은 다른 모든 사람이 작업하는 프로젝트 이력의 안정적인 부분에 속하는 잘 알려진 커밋입니다.또한 0개 이상의 '필요한 패치'가 필요합니다.이들 패치는 아직 "기본 커밋"의 일부가 아닌 비행 중인 잘 알려진 패치이며 패치를 적용하기 전에 토폴로지 순서로 "기본 커밋" 위에 적용해야 합니다.
commit'은 'base commit'으로됩니다.
base-commit:에 '가'가 붙습니다.커밋 오브젝트 이름의 40-글자 뒤에 붙습니다.
패치전제 패치'로 됩니다.prerequisite-patch-id:의 "id"가 붙습니다."patch id"의 ID를 수 .git patch-id --stable입니다.
2.(2019년"Git 2.23 (2019년 3분기)"를통해 입니다.--base"의 옵션"format-patch 했습니다.patch-ids되어 , 「Precision Patchs」는 「 Patchs」에 .git patch-id --stable
Stephen akshaykaBoyd()의 commit a8f6855, commit 6f93d26(2019년 4월 26일)을 참조하십시오.
(202d12, 2019년 6월 13일 Junio C Hamano에 의해 병합됨)
format-patch: 조조--base patch-id안정
우린 그 사건들을 처리할 때마다 콘텍스트를 플러싱하지 않았어요
patch-id( 「」)diff.c이 을 하고 때 ''패치 ID'가 '패치 ID는 '패치 ID'로 되어 있습니다.patch-iddiscloss.비슷한
patch-id.cdiff.c때 수format-patch --base=의 명령어 호출 유형입니다.
2.(2019년 "Git 2.24 (2019년 4분기)",git format-patch -o <outdir> "에을 했다.mkdir <outdir>가 .mkdir -p <outdir>"를 수정하고 있습니다.
Bert Wesarg()bertwesarg의 commit edefc31 (2019년 10월 11일)을 참조하십시오.
(커밋 f1afbb0, 2019년 10월 18일 Junio C Hamano에 의해 병합됨)
: 출력 디렉토리의 주요 컴포넌트를 만듭니다
format-patch.서명자: Bert Wesarg
-는 '형식 - o'에 해당됩니다
mkdir <outdir>는 '아니다'가 아닙니다mkdir -p <outdir>'이렇게 하다'
'어울리지 않다는 사용하지 마세요.
adjust_shared_perm보안에 영향을 미칠 수 있는 주요 디렉토리에 있습니다.비활성화'를 으로써 실현됩니다.config.sharedRepository는 것처럼요.git init는 합니다.
2.2020년 Git 2.25(2020년 1분기),git rebase "는 "는 잘 하지 않았습니다.format.useAutoBase설정 변수가 설정되어 있습니다.이거는 수정되었습니다.
Denton Liu()Denton-L에 의한 commit cae0bc0, commit 945dc55, commit 700e006, commit a749d01, commit 0c47e06 (2019년 12월 4일)을 참조하십시오.
(2019년 12월 16일, 71a7de7, 커밋에서 Junio C Hamano에 의해 병합됨)
rebase: 수정format.useAutoBase보고 기준:크리스티안 비징어
서명자: Denton Liu★★★★★★★★★★★★★★★★
format.useAutoBase = true기본 재배치 실행 중 오류가 발생했습니다.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을 짜다format.useAutoBase정됩니니다다
Git 2.29 (2020년 4분기)에서 ""git format-patch(man)는 ""를 습득합니다.whenAble의 가능한 입니다.format.useAutoBase설정 변수가 no-op이 되는 것은, 자동적으로 계산되는 베이스가 의미가 없는 경우입니다.
Jacob jacob-kellerKeller의 commit 7efba5f(2020년 10월 1일)를 참조하십시오().
(2020년 10월 5일, Junio C Hamano에 의해 합병 ----커밋 5f8c70a에서)
format-patch: 티칭format.useAutoBasewhenAbleoption()" 표시서명자: 제이콥 켈러
format.useAutoBase은, 가 「이네이블을 유효하게 하기 합니다.--base=auto이치노이로 인해 오래된 패치를 포맷하려고 할 때 예기치 않은 오류가 발생하여 워크플로우가 불량할 수 있습니다.
$ git format-patch -1 <an old commit> fatal: base commit shouldn't be in revision list'알겠습니다'를 는 할 수 스러울 수 .사용자가 요구했던 것이 반드시 명백하다고는 할 수 없기 때문입니다.
--base(설정).우리는 원한다
--base=auto포맷된 패치가 요청 시 기본 정보를 포함하지 않는 경우에도 마찬가지로 혼란스럽기 때문에 적절한 기준을 제공할 수 없을 때 실패합니다.
format.useAutoBase모드 "신규 모드"whenAble이 모드를 사용하면 포맷 패치는 가능한 경우 기본 커밋을 포함하려고 합니다.단, 유효한 기본 커밋을 찾을 수 없는 경우 포맷 패치는 기본 커밋 없이 패치 포맷을 계속합니다.
을 사용할 수 되는
--base--base=whenAble★★★★★★★★★★★★★★★★★」--base=whenable.'를 합니다.
base_commit변수에auto_base.이는 사용자가 명령줄에서 이 옵션의 기본 커밋 생성을 요구할 수 없음을 의미합니다.그러나 이것은 그다지 가치가 없는 것 같습니다.사용자가 기본 정보를 수동으로 요청하면 즉시 적절한 기본 커밋을 얻지 못했음을 알 수 있습니다.이것에 의해, 유저는, 포맷의 속행 여부를 정보에 근거해 선택할 수 있습니다.
를 추가합니다.
--base.
git config이제 man 페이지에 다음이 포함됩니다.
format-patch폴트입입니니다
「이렇게 하면 좋다」라고 할 수도 있습니다.whenAble를 유효하게 하다--base=auto적절한 베이스를 사용할 수 있는 경우, 그렇지 않은 경우 포맷 dying 없이 베이스 정보 추가를 건너뜁니다.
Git 2.30 (Q1 2021)에서는 ""git format-patch --output=there(man)가 예상대로 작동하지 않고 크래시되었습니다.
이제 옵션이 지원됩니다.
Jeff peffKing의 commit dc1672d, commit 1e1693b, commit 4c6f781(2020년 11월 4일)을 참조하십시오().
(2020년 11월 18일, Junio C Hamano에 의해 합병 ----commit 5edc8bd)
format-patch: support --output 옵션보고서 작성자: 요하네스 포스트러
서명자: Jeff King
diff diff를
--output옵션을 지정합니다.또한 baa4adc66a까지 (파스 옵션: 옵션 생략을 무효로 함)PARSE_OPT_KEEP_UNKNOWN,했습니다.한 후 를 format-patch로 합니다.setup_revisions().
'어느 정도', '어느 정도', '어느 정도'를받겠습니다.--output=foo의 입니다.--output-directory=foo"는 "-output-directory=foo"를 의미합니다.--output diff code를 사용합니다.그 결과 무의미한 동작과 버그가 발생합니다.는 rev.diff의 rev.diff.file에서 파일에 .각 패치 파일에 대해 여는 자체 핸들로 덮어씁니다.--output --output --output--output--output--output--output--output--output--output--opt는 rev에 diff diff rev.diffopt.close_file이 설정됩니다.
log_tree_commit()파일 핸들 자체가 닫힙니다. 후, 「」의cmd_format_patch()을 사용하다가장 간단한 해결책은 포맷 패치에 의한 출력을 허용하지 않는 것입니다.아무도 의도하지 않았기 때문입니다.다만, 실수로 문서화되어 있습니다(format-patch에는 diff-options가 포함되어 있기 때문입니다).또한 출력 전체를 지정된 파일에 쓰는 " 와도
git log(man)동작합니다.포맷 패치에 대해서도 간단하게 동작할 수 있습니다. --stdout과 매우 비슷하지만 특정 파일을 가리킵니다.옵션 은 --output으로 할 수 .
"close_file"file(diffopt.은 사용할 수 .diff 설정에서는 stdout으로 입니다).으로 설정되기 때문입니다.과 같은 입니다.(하면 문제가 그 외에는 --stdout과 완전히 같은 상황입니다(파일을 fclose()하지 않지만 stdout 케이스도 마찬가지입니다.프로그램을 종료하면 문제가 해결됩니다).
commit-id를 사용하여 git 패치를 만듭니다.
$ git format-patch -1 commit-id
이 명령은 다음 파일 이름으로 패치를 만듭니다.
0001-commit-message.patch
패치를 적용하려면:
$ git am 0001-commit-message.patch
(마지막 커밋이 아닌) 특정 커밋에서 패치를 생성하려면 다음 절차를 수행합니다.
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
Mercurial 배경과 함께 사용하려고 했습니다.
git log --patch -1 $ID > $file
저는 '어느 정도'를 쓸까 중이에요.git format-patch -1 $ID
지정된 파일만 다른 경우 다음을 사용할 수 있습니다.
git diff master 766eceb --connections/> 000-syslog.syslogs
특정 SHA-1 값에 대해서만 패치를 생성하는 방법은 무엇입니까?
매우 간단합니다.
1. 션 1git show commitID > myFile.patch
§ 2git commitID~1..commitID > myFile.patch
: 치환: ★★commitID아이디(SHA-1)입니다.
언급URL : https://stackoverflow.com/questions/6658313/how-can-i-generate-a-git-patch-for-a-specific-commit
'programing' 카테고리의 다른 글
| 배치 파일에서 PowerShell 스크립트를 실행하는 방법 (0) | 2023.04.10 |
|---|---|
| 시작 프로세스에서 표준 출력 및 오류 캡처 (0) | 2023.04.10 |
| 분기를 변경하지 않고 다른 Git 분기에 있는 파일 보기 (0) | 2023.04.10 |
| UILabel의 여러 줄 텍스트 (0) | 2023.04.10 |
| ms sql server 2005에서 열려 있는/액티브 접속의 합계수를 확인하는 방법 (0) | 2023.04.10 |