Programming

원격 지점에서 체리 픽을하는 방법?

procodes 2020. 7. 27. 07:58
반응형

원격 지점에서 체리 픽을하는 방법?


체리 픽을 수행하는 데 문제가 있습니다. 내 로컬 컴퓨터에서 현재 "마스터"지점에 있습니다. "zebra"라는 다른 지점에서 커밋을 선택하고 싶습니다. "제브라"분기는 원격 분기입니다.

따라서 자식 상태 :

# On branch master
nothing to commit (working directory clean)

좋아, 이제 내가 원하는 커밋을 선택하려고합니다.

git cherry-pick xyz
fatal: bad object xyz

여기서 "xyz"는 지사 "zebra"에서 발생한 커밋의 서명입니다.

첫 번째 명백한 질문은 왜 내가 참조하고있는 커밋을 찾을 수 없습니까? 나는 이것이 어떻게 정직하게 작동하는지 이해하지 못한다. git은 다른 모든 브랜치에 대해 작업 디렉토리에 로컬로 커밋 데이터베이스와 같은 것을 저장합니까? cherry-pick 명령을 실행할 때 로컬 데이터베이스를 검색하여 내가 말하고있는 커밋을 찾습니까?

"얼룩말"은 원격 지점이므로 로컬에 데이터가 없다고 생각했습니다. 그래서 지점을 바꿨습니다.

git checkout zebra
Switched to branch 'zebra'

이제 로컬 컴퓨터에서 디렉토리의 파일이 얼룩말의 상태를 올바르게 반영 함을 알 수 있습니다. 다시 마스터로 전환하고 체리 피킹을 다시 시도하십시오 (커밋 데이터를 사용할 수 있음).하지만 같은 문제가 발생합니다.

나는 여기에서 무슨 일이 일어나고 있는지에 대한 근본적인 오해를 가지고 있으며, 어떤 도움이라도 좋을 것입니다.


"얼룩말"은 원격 지점이므로 로컬에 데이터가 없다고 생각했습니다.

올바른 데이터가 없지만 올바로 해결하려고했습니다. 원격 소스에서 로컬로 데이터를 수집하려면을 사용해야 git fetch합니다. 당신이 git checkout zebra마지막으로 가져온 지점의 상태로 전환 했을 때 . 따라서 먼저 원격에서 가져 오십시오.

# fetch just the one remote
git fetch <remote>
# or fetch from all remotes
git fetch --all
# make sure you're back on the branch you want to cherry-pick to
git cherry-pick xyz

OP의 답변에 대한 부록과 마찬가지로

문제가있는 경우

fatal: bad object xxxxx

그 커밋에 액세스 할 수 없기 때문입니다. 즉, 해당 저장소가 로컬에 저장되어 있지 않습니다. 그때:

git remote add LABEL_FOR_THE_REPO REPO_YOU_WANT_THE_COMMIT_FROM
git fetch LABEL_FOR_THE_REPO
git cherry-pick xxxxxxx

여기서 xxxxxxx는 원하는 커밋 해시입니다.


개발 브랜치를 마스터에 병합 한 후 일반적으로 개발 브랜치를 삭제합니다. 그러나 개발 브랜치에서 커밋을 체리 선택 하려면 "잘못된 오브젝트"오류를 피하기 위해 병합 커밋 해시를 사용해야합니다 .


체리 픽하려는 원격 저장소 ( "foo") 추가

$ git remote add foo git://github.com/foo/bar.git

그들의 가지를 가져옵니다

$ git fetch foo

커밋을 나열하십시오 (가져온 모든 커밋을 나열해야합니다 foo)

$ git log foo/master

필요한 커밋을 체리 픽

$ git cherry-pick 97fedac

먼저 로컬 드라이브에서 두 가지 데이터를 모두 가져와야합니다.

무슨 일이 일어나고 있는지는 현재 지점 b에 있지만 지점 a의 로컬 사본이 아직 업데이트되지 않은 지점 a에서 지점 b로 체리 선택하려고합니다 (git pull on을 수행해야 함) 두 가지가 먼저).

단계 :
-자식 체크 아웃 분기
-a-자식 풀 원점 분기
-a-자식 체크 아웃 지점
-b-자식 풀 원점 분기
-b-자식 체리-픽 <해시>

출력 :
[branch-b <hash>] 로그 데이터
작성자 : 작성자 <저자
1 파일 변경, 1 삽입 (+), 3 삭제 (-)


풀 요청 커밋 ID 탭에서 커밋 ID를 사용한 후이 오류가 반환되었습니다. 그 커밋은 이후에 뭉개져 병합되었습니다. github pull 요청에서 커밋 탭에서 커밋 ID를 사용하는 대신 "merged commit xxxxxxx into ..."라는 텍스트를 찾으십시오.


커밋은 로컬에 있어야합니다 git log. 를 사용하여 확인하십시오 .

커밋이 없으면 git fetch최신 원격으로 로컬을 업데이트하십시오.


This can also be easily achieved with SourceTree:

  • checkout your master branch
  • open the "Log / History" tab
  • locate the xyz commit and right click on it
  • click on "Merge..."

done :)


If you have fetched, yet this still happens, the following might be a reason.

It can happen that the commit you are trying to pick, is no longer belonging to any branch. This may happen when you rebase.

In such case, at the remote repo:

  1. git checkout xxxxx
  2. git checkout -b temp-branch

Then in your repo, fetch again. The new branch will be fetched, including that commit.

참고URL : https://stackoverflow.com/questions/13788945/how-to-cherry-pick-from-a-remote-branch

반응형