programing tip

Git에서 특정 커밋을 병합하는 방법

itbloger 2020. 9. 28. 08:25
반응형

Git에서 특정 커밋을 병합하는 방법


GitHub의 저장소에서 분기를 분기하고 나에게 특정한 것을 커밋했습니다. 이제 원래 저장소에 HEAD.

이전 커밋없이 만 병합하고 싶습니다. 어떻게해야합니까? 모든 커밋을 병합하는 방법을 알고 있습니다.

git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push

' git cherry-pick'가 여기에서 답이되어야합니다.

기존 커밋에 의해 도입 된 변경 사항을 적용합니다.

이 게시물에서 체리 따기의 결과에 대한 bdonlan 의 답변 을 읽는 것을 잊지 마십시오 :
"브랜치에서 모든 커밋을 가져 오고 지정된 커밋을 다른 커밋으로 푸시" , 여기서 :

A-----B------C
 \
  \
   D

된다 :

A-----B------C
 \
  \
   D-----C'

이 커밋의 문제는 git이 커밋이 모든 기록을 포함하는 것으로 간주한다는 것입니다.

C '는 다른 SHA-1ID를 가지고 있습니다.
마찬가지로 체리가 한 브랜치에서 다른 브랜치로 커밋을 선택하는 것은 기본적으로 패치를 생성 한 다음 적용하는 것을 포함하므로 그런 방식으로 히스토리도 손실됩니다.

이 커밋 ID 변경은 다른 것들 중에서 git의 병합 기능을 손상시킵니다 (아주 드물게 사용되는 경우이를 해결하는 휴리스틱이 있습니다).
하지만 더 중요한 것은 함수 종속성을 무시한다는 것입니다. C가 실제로 B에 정의 된 함수를 사용했다면 .


git cherry-pick을 사용하여 단일 커밋을 현재 브랜치에 적용 할 수 있습니다.

예: git cherry-pick d42c389f


예를 들어 이해해 보겠습니다.

X <commit-id>를 가리키는 master같은 분기 가 있고 Y <sha1>을 가리키는 새 분기가 있습니다.

어디 Y <커밋 ID> = <마스터> 지점 커밋 - 몇 커밋

이제 Y 브랜치에 대해 마스터 브랜치와 새 브랜치 사이의 커밋을 틈새로 닫아야한다고 말합니다. 다음은 우리가 따를 수있는 절차입니다.

1 단계:

git checkout -b local origin/new

여기서 local은 지점 이름입니다. 모든 이름을 지정할 수 있습니다.

2 단계:

  git merge origin/master --no-ff --stat -v --log=300

마스터 브랜치에서 새 브랜치로 커밋을 병합하고 병합중인 실제 커밋을 최대 <n> 개까지 한 줄로 된 설명으로 로그 메시지의 병합 커밋을 만듭니다.

Git 병합에 대한 자세한 정보와 매개 변수는 다음을 참조하십시오.

git merge --help

또한 특정 커밋을 병합해야하는 경우 다음을 사용할 수 있습니다.

git cherry-pick <commit-id>

참고 URL : https://stackoverflow.com/questions/881092/how-to-merge-a-specific-commit-in-git

반응형