다른 자식 저장소에서 커밋을 체리 피킹 할 수 있습니까? 있습니다. 일반적으로 HEAD@{x}reflog에서를 사용하여 cherry-pick을

첫 번째 아무것도 모르는 다른 git 리포지토리에서 커밋이 필요한 git 리포지토리로 작업하고 있습니다.

일반적으로 HEAD@{x}reflog에서를 사용하여 cherry-pick을 선택 하지만 .git이 reflog 항목 (다른 물리적 디렉토리)을 알지 못하기 때문에 어떻게 이것을 체리 피킹 할 수 있습니까?

을 사용하고 git-svn있습니다. 내 첫 분기 사용 git-svntrunk서브 버전의 repo의, 다음 분기 사용되는 git-svn서브 버전 분기에.



답변

다른 저장소를 원격으로 추가 한 다음 변경 사항을 가져와야합니다. 거기에서 커밋을보고 체리 픽을 선택할 수 있습니다.

그렇게 :

git remote add other https://example.link/repository.git
git fetch other

이제해야 할 모든 정보가 git cherry-pick있습니다.

리모컨 작업에 대한 자세한 정보는 https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes


답변

주어진 대답은 format-patch를 사용하는 것이지만 질문은 다른 폴더에서 체리를 선택하는 방법 이었기 때문에 다음과 같은 작업을 수행하는 코드가 있습니다.

$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k

( @cong ma의 설명 )

git format-patch명령은 some_other_repoSHA로 지정된의 커밋 ( -1한 번의 커밋 만) 에서 패치를 만듭니다 . 이 패치는 git am로 패치되어 로컬로 패치를 적용합니다 ( -3패치가 제대로 적용되지 않으면 3 방향 병합 시도). 그것이 희망입니다.


답변

다음은 remote-fetch-merge의 예입니다.

cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB

그럼 당신은 할 수 있습니다 :

git cherry-pick <first_commit>..<last_commit>

또는 전체 지점을 병합 할 수도 있습니다

git merge projectB/master


답변

할 수 있지만 두 단계가 필요합니다. 방법은 다음과 같습니다.

git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD

대체 <remote-git-url>당신이에서 체리 – 선택하고자하는 저장소의 URL 또는 경로.

대체 <branch>당신이 원하는 지점 또는 태그 이름으로 원격 저장소에서 벚꽃 선택하십시오.

FETCH_HEAD지점에서 git SHA로 바꿀 수 있습니다 .

업데이트 : @pkalinow의 피드백에 따라 수정되었습니다.


답변

다음은 원격을 추가하고 분기를 가져오고 커밋을 선택하는 단계입니다.

# Cloning our fork
$ git clone git@github.com:ifad/rest-client.git

# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git

# Fetch their branches
$ git fetch endel

# List their commits
$ git log endel/master

# Cherry-pick the commit we need
$ git cherry-pick 97fedac

출처 : https://coderwall.com/p/sgpksw


답변

Git으로 패치를 작성하고 적용하는 방법을 참조하십시오 . (질문의 말에서,이 다른 저장소는 완전히 다른 코드베이스를위한 것이라고 가정했습니다. 동일한 코드베이스의 저장소라면 @CharlesB가 제안한 것처럼 원격으로 추가해야합니다. 코드베이스, 여전히 원격으로 추가 할 수는 있지만 전체 분기를 저장소로 가져 가고 싶지 않을 수도 있습니다 …)


답변

다음과 같이 한 줄로 할 수 있습니다. 체리 선택 변경이 필요한 자식 저장소에 있고 분기를 수정했는지 확인하십시오.

git fetch ssh://git@stash.mycompany.com:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533
#

git fetch [브랜치 URL] [브랜치에서 체리 픽으로 선택] && git cherry-pick [커밋 ID]