[git] git : 한 리포지토리의 커밋에 의해 도입 된 변경 사항을 다른 리포지토리에 적용
나는 repo1
및 repo2
로컬 컴퓨터에 있습니다. 그들은 매우 유사하지만 후자는 일종의 다른 분기입니다 ( repo1
더 이상 유지되지 않음).
/path/to/repo1 $ git log HEAD~5..HEAD~4
<some_sha> Add: Introduce feature X
어떻게 커밋에 의해 변경 적용 <some_sha>
에 repo1
에를 repo2
?
패치를 준비해야 cherry-pick
합니까? 아니면 리포지토리간에 패치를 수행 할 수 있습니까?
동일하지만 커밋 범위에 대해 어떻게합니까?
답변
해킹 으로 GitTips 페이지에서 두 개의 다른 저장소에있는 커밋을 비교하기위한 레시피를 수정할 수 있습니다 .
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects \
git cherry-pick $(git --git-dir=../repo/.git rev-parse --verify <commit>)
어디 ../repo
다른 저장소에 대한 경로입니다.
최신 Git을 사용하면 cherry-pick으로 여러 개정 및 개정 범위를 사용할 수 있습니다. .
는 $(git --git-dir=../repo/.git rev-parse --verify <commit>)
번역 여기 <commit>
(예 HEAD
, 또는 v0.2
또는 master~2
커밋의 SHA-1 식별자로는 복사해서 제 리포지토리 값인하는). 선택하려는 변경의 SHA-1을 알고 있으면 필요하지 않습니다.
참고 가 다른 객체 저장소가 하나 개의 작업을 위해, 일시적 것을 알고하지 않습니다하지만 힘내, 소스 저장소에서 개체를 복사 건너 뛸 수있다. 다음을 사용하여 두 번째 저장소에서 개체를 복사해야 할 수 있습니다.
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects git repack -a -d -f
이렇게하면 두 번째 저장소에서 빌린 객체가 원래 저장소 저장소에 저장됩니다.
검증되지 않은.
그렇게 해키하지 않은 해결책은 knittl 대답 을 따르는 것입니다 .
- 커밋을 복사하려는 두 번째 저장소로 이동하고 원하는 커밋에서 패치를 생성합니다.
git format-patch
- 선택적으로 패치 (0001- * 등)를 저장소에 복사합니다.
git am --3way
패치 적용에 사용
답변
아마도 해당 패치를 사용한 다음 저장소에 적용 git format-patch
하고 싶을 것입니다 git am
.
/path/to/1 $ git format-patch sha1^..sha1
/path/to/1 $ cd /path/to/2
/path/to/2 $ git am -3 /path/to/1/0001-…-….patch
또는 한 줄로 :
/path/to/2 $ git --git-dir=/path/to/1/.git format-patch --stdout sha1^..sha1 | git am -3
답변
cherry-pick
두 번째 저장소를 첫 번째 저장소에 원격으로 추가하면 할 수 있습니다 fetch
.
답변
repo diff https://github.com/raghakh/android-dev-scripts/commit/a57dcba727d271bf2116f981392b0dcbb22734d0 의 diff 출력을 적용하기위한 작은 스크립트를 작성했습니다.