git : 한 리포지토리의 커밋에 의해 도입 된 변경 사항을 다른 리포지토리에 적용 $ git log

나는 repo1repo2로컬 컴퓨터에 있습니다. 그들은 매우 유사하지만 후자는 일종의 다른 분기입니다 ( 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.