멀리 떨어진 지점에서 체리를 따는 방법?
체리픽을 하는 데 어려움을 겪고 있습니다.저는 현재 지역 컴퓨터에서 "마스터" 지점에 있습니다.저는 "제브라"라는 다른 지점의 커밋을 선택하고 싶습니다.zebra 분기는 원격 분기입니다.
Sogit 상태:
# On branch master
nothing to commit (working directory clean)
좋아요, 이제 저는 제가 원하는 약속을 선택하려고 노력합니다.
git cherry-pick xyz
fatal: bad object xyz
여기서 "xyz"는 제가 관심 있는 지점 "zebra"에서 발생한 커밋의 서명입니다.
첫 번째 분명한 질문은 왜 제가 언급하고 있는 커밋을 찾을 수 없냐는 것입니다.저는 솔직히 말해서 이게 어떻게 작동하는지 정말 이해할 수 없습니다.Git는 다른 모든 지점에 대해 내 작업 디렉토리에 커밋 데이터베이스와 같은 것을 로컬로 저장합니까?cherry-pick 명령을 실행할 때 로컬 데이터베이스를 검색하여 내가 말하는 커밋을 찾습니까?
zebra는 원격 지사이기 때문에 로컬 데이터가 없다고 생각했습니다.그래서 지점을 바꿨습니다.
git checkout zebra
Switched to branch 'zebra'
이제 로컬 컴퓨터에서 디렉터리에 있는 파일이 zebra의 상태를 올바르게 반영하는 것을 볼 수 있습니다.마스터로 다시 전환하고 다시 체리픽을 시도하지만(커밋 데이터를 지금 사용할 수 있기를 바랍니다) 동일한 문제가 발생합니다.
저는 여기서 무슨 일이 일어나고 있는지 근본적으로 오해하고 있습니다. 어떤 도움이라도 주시면 감사하겠습니다.
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
여기서 xxxxxxxx는 원하는 커밋 해시입니다.
체리를 선택할 원격 repo("foo") 추가
$ git remote add foo git://github.com/foo/bar.git
그들의 가지를 가져와라.
$ git fetch foo
커을니다나에 되어야 합니다). 가져온 커밋의 모든 커밋을 나열해야 합니다.foo
)
$ git log foo/master
필요한 커밋을 선택합니다.
$ git cherry-pick 97fedac
개발 브랜치를 마스터에 병합한 후에는 주로 개발 브랜치를 삭제합니다.그러나 개발 분기의 커밋을 체리로 선택하려면 병합 커밋 해시를 사용하여 "나쁜 개체" 오류를 방지해야 합니다.
먼저 로컬 드라이브에서 두 분기 데이터를 모두 가져와야 합니다.
현재 branch-a에서 branch-b로 체리픽을 하려고 하는데, 여기서 branch-a의 로컬 복사본은 아직 업데이트되지 않았습니다(두 branch에서 먼저 git pull을 수행해야 합니다).
절차:
branch-agit checkout branch-a.
origin pull origin branch-a
checkout checkout branch-b.
체리코 <리끼픽>>
선택 사항:
로그 데이터 [syslog-b <syslog>] 파일
파일: <저자>
변경 , 삽입), 삭제 1건, 삭제 1건, 삭제((+) 1건, 삭제(-) 3건
단 2단계의 작은 단계:
- 기트페치
- git 체리-픽 어 커밋-커밋-커밋-커밋-커밋.
. 커은로합니다를 하십시오. 다음을 사용하여 확인하십시오.git log
.
커밋이 없는 경우 시도합니다.git fetch
로컬을 최신 리모컨으로 업데이트합니다.
풀 요청 커밋 ID 탭에서 커밋 ID를 사용한 후 이 오류가 반환되었습니다.그 커밋은 나중에 진압되고 병합되었습니다.github pull 요청에서 다음 텍스트를 찾습니다. "commit xxxxxxxxxx를 다음에 병합했습니다.커밋 탭에서 커밋 ID를 사용하려고 시도하는 대신.
가져왔는데도 여전히 이런 일이 발생한다면 다음과 같은 이유가 있을 수 있습니다.
선택하려는 커밋이 더 이상 분기에 속하지 않을 수 있습니다.기본값을 변경할 때 발생할 수 있습니다.
이 경우 원격 repo에서 다음을 수행합니다.
git checkout xxxxx
git checkout -b temp-branch
그런 다음 레포에서 다시 가져오십시오.해당 커밋을 포함하여 새 분기를 가져옵니다.
저는 이 문제를 체리픽하고 싶은 약속을 가지고 지점에 가서 해결했습니다.
git checkout <branch With Commit To Cherry-Pick>
로그를 사용하여 커밋 해시 찾기
git log
노트패드에서 해시 컷 앤 페이스트를 찾은 경우. 명령을 사용하여 위로 스크롤하여 해시를 가져온 다음 커밋할 분기를 체크아웃합니다.
git checkout < branch I Want To Place My Cherry-Picked-Hash In>
마지막으로 cherry-pick from git (참고) -x는 cherry-pick 메시지를 원본에 추가하는 것입니다."커밋을 녹음할 때 원래 커밋 메시지에 "(커밋에서 체리 선택..."이라고 적힌 줄을 추가하여 이 변경 사항이 체리 선택된 커밋을 나타냅니다."
git cherry-pick -x <your hash commit to add to the current branch>
이는 SourceTree에서도 쉽게 달성할 수 있습니다.
- 마스터 브랜치를 확인합니다.
- 로그 / 기록 탭 열기
- xyz 커밋을 찾아 마우스 오른쪽 단추로 클릭합니다.
- "Merge..."를 클릭합니다.."
완성했습니다 :)
단계:
기트페치
git checkout [원격 체크아웃], 예: git checkout origin/message
깃체리픽 db8d7526f2218829a96de72c0cf27e3636893f36
git branch [new-branch], new-branch는 원격-branch와 동일해야 합니다. 예: git branch 급여 지급
git checkout[신규 체크아웃]
git push origin
언급URL : https://stackoverflow.com/questions/13788945/how-to-cherry-pick-from-a-remote-branch
'programing' 카테고리의 다른 글
깃허브에서 다른 사람의 포크에 가지를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.27 |
---|---|
WordPress 플러그인에서 프로그래밍 방식으로 Mod Rewrite 규칙 추가 (0) | 2023.06.27 |
파이썬에서 외부 명령을 비동기식으로 실행하려면 어떻게 해야 합니까? (0) | 2023.06.27 |
mongodb에서 여러 ID를 삭제하는 방법은 무엇입니까? (0) | 2023.06.27 |
변환에 대한 페이로드로 동적 경로를 사용하여 Vuex 저장소에서 항목을 삭제하는 방법은 무엇입니까? (0) | 2023.06.27 |