2016-10-30 13 views
2

마지막 N 커밋을위한 패치 파일을 만들어 다른 분기에 별도 커밋으로 적용해야합니다.마지막 N 커밋을위한 여러 패치를 git에서 커밋하는 방법

자식은 diff HEAD ~ 3 HEAD ~ 2 >> diff1
자식은 diff HEAD ~ 2 HEAD ~ 1 개 >> diff2
적합은 diff HEAD ~ 1 개 HEAD : N = 3의 경우 나는 이렇게 생각 >> 다음

및 diff3

각각 다른 지점에이를 적용

자식이 diff1
(푸시)
자식 적용 디 적용 FF2
(푸시)
자식이 적용 diff3

이 작업을 수행 할 수있는 짧은 방법이 있나요?

답변

5

git format-patchgit am으로 각각 수행 할 수 있습니다. 귀하의 예제에서, 시도 : 이것은, 0003-commit-baz.patch을 파일 0001-commit-foo.patch, 0002-commit-bar.patch를 생성합니다

git format-patch HEAD~3 

. 그럼 당신은 다른 REPO에 복사하고이를 적용 할 git am를 사용할 수 있습니다 메시지, SHA는, 및 타임 스탬프를 커밋을 포함하여 이전 트리를 만들어으로

git am *.patch 

이 커밋을 보존합니다.

+0

msysgit의 "치명적 : 읽기 위해 * .patch '를 열 수 없습니다 : 잘못된 인수입니다."오류 메시지 : https://groups.google.com/forum/#!topic/msysgit/1IT785Jf4Zo – Ilya

1

시도 git cherry-pick 다른 분기로 커밋합니다 (임시 패치를 만들지 않아도 됨). 이 질문은 한 번에 여러 커밋을 체리 선택하는 방법에 대한 대답입니다. How to cherry-pick multiple commits

+0

패치가 필요합니다. 가지는 두 개의 다른 프로젝트에 있습니다. – Meysam

+1

두 번째 repo를 원격 저장소로 첫 번째 컨테이너에 추가하면 다른 저장소간에 체리를 선택할 수 있습니다. – TomaszGuzialek

1

분기가 다른 프로젝트에 있기 때문에 패치가 필요하다는 의견을 언급했습니다. 그건 문제가되지 않습니다. 다른 프로젝트의 리모컨을 추가 할 수 있으며, 공통된 히스토리를 공유하지 않더라도 그 프로젝트에서 체리 피킹 할 수 있습니다. 체리 피킹은 조상과 관련이 없습니다. 패치를 할 때와 마찬가지로 변경 사항을 재생하는 것입니다.


(정말 의심하지만) 어떤 이유로 체리 따기, 당신은 예를 들어, 배쉬에서 루프를 사용할 수 있습니다 정말 당신을위한 옵션을 선택하지 않습니다에 대한 경우 :

for ((i = 3, d = 1; i > 0; i--, d++)); do ((j = i - 1)); git diff HEAD~$i HEAD~$j > diff$d; done 

당신은 유사한 루프를 쓸 수 있습니다 git apply 명령의 경우