sourcecode

킷체리픽이 말하길 "...38c74d는 병합이지만 -m 옵션이 제공되지 않았습니다."

copyscript 2023. 6. 8. 22:27
반응형

킷체리픽이 말하길 "...38c74d는 병합이지만 -m 옵션이 제공되지 않았습니다."

마스터 브랜치에 변경 사항이 있어서 업스트림으로 가져오려고 합니다.제가 다음 커밋을 잘 고를 때.하지만, 저는 git가 다음과 같이 말하는 fd9f578에 갇힙니다.

$ git cherry-pick fd9f578
fatal: Commit fd9f57850f6b94b7906e5bbe51a0d75bf638c74d is a merge but no -m option was given.

git이 나에게 말하려고 하는 것은 무엇이고 cherry-pick은 여기서 사용하기에 맞는 것입니까?마스터 분기에는 업스트림 분기에서 수정된 파일에 대한 변경 사항이 포함되어 있으므로 병합 충돌이 있을 것으로 확신하지만 해결하기에는 그리 나쁘지 않습니다.저는 어떤 변화가 필요한지 알고 있습니다.

이것들은 제가 업스트림으로 가져오고 싶은 약속들입니다.

e7d4cff added some comments...
23e6d2a moved static strings...
44cc65a incorporated test ...
40b83d5 whoops delete whitspace...
24f8a50 implemented global.c...
43651c3 cleaned up ...
068b2fe cleaned up version.c ...
fd9f578 Merge branch 'master' of ssh://extgit/git/sessions_common
4172caa cleaned up comments in sessions.c ...

체리 선택의 작동 방식은 (해당 지점의 작업 트리와 상위 항목의 작업 트리 간의 차이) 표시되는 차분 변경 세트를 가져와 현재 분기에 적용하는 것입니다.

그래서, 만약 약속에 두 명 이상의 부모가 있다면, 그것은 또한 두 개 이상의 어려움을 나타냅니다 - 어떤 것이 적용되어야 할까요?

당신은 체리픽을 하려고 합니다.fd9f578두 부모와의 합병이었습니다.그래서 당신은 체리-픽 명령어를 사용하여 어떤 차이를 계산해야 하는지 알려주어야 합니다.-m선택.예를들면,git cherry-pick -m 1 fd9f578상위 1을 기준으로 사용합니다.

구체적인 상황을 확실히 말씀드릴 수는 없지만, 사용하는 것은git merge대신에git cherry-pick일반적으로 권장됩니다.병합 커밋을 선택하면 지정하지 않은 상위 항목의 모든 변경 내용이 축소됩니다.-m의 약속으로.당신은 그들의 모든 역사를 잃고, 그들의 모든 어려움을 함께 어루만져요.당신의 결정.

-m부모 번호를 의미합니다.

Git 문서에서:

일반적으로 병합의 어느 쪽을 주선으로 간주해야 하는지 모르기 때문에 병합을 선택할 수 없습니다.이 옵션은 주 라인의 부모 번호(1부터 시작)를 지정하고 체리픽이 지정된 부모에 대한 변경 내용을 재생할 수 있도록 합니다.

예를 들어 커밋 트리가 아래와 같은 경우:

- A - D - E - F -   master
   \     /
    B - C           branch one

그리고나서git cherry-pick E당신이 직면한 문제를 만들어 낼 것입니다.

git cherry-pick E -m 1사용을 의미D-E,하는 동안에git cherry-pick E -m 2사용을 의미B-C-E.

단순화.커밋을 체리 픽합니다.합병을 무시하지 마세요.

관련 커밋을 병합할 때와 체리 선택할 때를 포함해야 하는 경우 두 가지 옵션이 있습니다.

  1. (더 복잡하고 모호하며 기록도 삭제됨) 적용할 부모를 지정할 수 있습니다.
  • 을 합니다.-m선택할 수 있습니다.를 들면, 들면를예,git cherry-pick -m 1 fd9f578병합에 나열된 첫 번째 부모를 기본으로 사용합니다.

  • 또한 병합 커밋을 선택하면 지정하지 않은 상위 항목의 모든 변경 내용이 축소됩니다.-m의 약속으로.당신은 그들의 모든 역사를 잃고, 그들의 모든 어려움을 함께 어루만져요.당신의 결정.

  1. (하는; )을할 수 git mergegit cherry-pick.
  • 럼처때럼▁as.git merge병합할 분기에 존재하는 모든 커밋을 적용하고 Git 로그에 개별적으로 나열합니다.

@Borealid의 대답은 맞지만, 분기의 정확한 병합 기록을 보존하는 데는 관심이 없고 선형화된 버전을 선택하고 싶다고 가정합니다.이를 위한 쉽고 안전한 방법은 다음과 같습니다.

상태:.X그리고 당신은 커밋을 체리픽으로 선택하고 싶어합니다.Y..Z.

  1. git checkout -b tempZ Z
  2. git rebase Y
  3. git checkout -b newX X
  4. git cherry-pick Y..tempZ
  5. (으)로 표시됨)git branch -D tempZ

수 .tempZ에 기반을 둔Z하지만 그 역사와 함께.Y앞으로 선형화된 다음 복사본에 체리 픽.X라고 하는newX(이 작업은 새 분기에서 수행하는 것이 돌연변이를 일으키는 것보다 안전합니다.X 수 해야 할 (.) 단 4계 4에 4서 충 수 있 으 일 인 방 적 법 로 으 반 해 해 야 합 결 니 다 이 는 물 며 론 을 있 돌 이 ▁. 합 니 .) 다 ▁4 ▁in ▁of , 야 ▁in 해 ▁step 결 해 일 ) ▁be 물 법 방 ▁waycherry-pick와 매우 유사하게 작동합니다.rebase그런 점에서)마지막으로 임시 파일을 삭제합니다.tempZ분점.

에서 " branch 메시지가 되면 2단계에서 "Current branch tempZ is update"("current branch tempZ is update")가 됩니다.Y..Z가 이미 선형이므로 해당 메시지를 무시하고 3단계를 진행하십시오.

다음 럼검토를 검토합니다.newX그게 당신이 원하는 일을 했는지 확인해 보세요

은 단순(참: 이것단것같않습지다니과한순은고않참다▁(습니같▁simple)과 .git rebase X에 때Z왜냐하면 그것은 어떤 식으로든 사이의 관계에 의존하지 않기 때문입니다.X그리고.Y공통 조상과 사이에 커밋이 있을 수 있습니다.Y당신이 원하지 않았던 것.)

단일 커밋을 선택하기에 좋은 @Daira Hopwood 방법의 단순화.임시 분기가 필요하지 않습니다.

저자의 경우:

  • Z가 원하는 커밋(fd9f578)
  • Y는 그 전에 커밋됩니다.
  • X 현재 작업 분기

그런 다음 수행:

git checkout Z   # move HEAD to wanted commit
git reset Y      # have Z as changes in working tree
git stash        # save Z in stash
git checkout X   # return to working branch
git stash pop    # apply Z to current branch
git commit -a    # do commit

언급URL : https://stackoverflow.com/questions/9229301/git-cherry-pick-says-38c74d-is-a-merge-but-no-m-option-was-given

반응형