2021-05-12 git 하나 이상의 제출된 파일 병합 git cherry-pick

3367 단어
다중 지점의 코드 라이브러리에서 코드를 한 지점에서 다른 지점으로 옮기는 것은 흔히 볼 수 있는 요구이다.이때 두 가지 상황.다른 지점의 모든 코드 변동이 필요하면 통합 (git merge) 을 사용하는 경우도 있다.또 다른 상황은 코드 변동 (몇 개 제출) 만 있으면 Cherry pick을 사용할 수 있다는 것이다.

1. 기본 용법


git cherry-pick 명령의 역할은 지정한 제출 (commit) 을 다른 지점에 적용하는 것입니다.
git cherry-pick 

위 명령은 지정한 커밋commitHash를 현재 지점에 적용합니다.이것은 현재 지점에서 새로운 제출을 할 것이다. 물론 그것들의 해시 값은 다르다.
예를 들어 코드 창고에는 마스터와feature 두 가지가 있다.
    a - b - c - d   Master
         \
           e - f - g Feature

현재 제출 f를 마스터 지점에 적용합니다.
DD에서 Master 분기로 전환
git checkout master

Cherry pick 작업
git cherry-pick f

위의 조작이 끝난 후 코드 라이브러리는 아래의 모습으로 변했다.
    a - b - c - d - f   Master
         \
           e - f - g Feature

위에서 볼 수 있듯이, 마스터 지점의 끝에 제출 f가 추가되었다.
git cherry-pick 명령의 매개 변수는 제출한 해시 값이 아니라 지점 이름도 가능합니다. 이 지점의 최신 제출을 이전하는 것을 의미합니다.
git cherry-pick feature

위 코드는feature 지점의 최근 제출을 현재 지점으로 옮기는 것을 표시합니다.

2. 여러 제출 이전


Cherry pick은 한 번에 여러 제출을 전송할 수 있습니다.
git cherry-pick  

위의 명령은 A와 B 두 개의 제출을 현재 지점에 적용합니다.이것은 현재 지점에서 대응하는 두 개의 새 제출을 생성합니다.
일련의 연속 제출을 옮기려면 아래의 간편한 문법을 사용하십시오.
git cherry-pick A..B 

위의 명령은 A에서 B로 모든 제출을 옮길 수 있습니다.올바른 순서에 따라 배치해야 합니다. 제출 A는 B보다 일찍 제출해야 합니다. 그렇지 않으면 명령이 실패하지만 오류가 발생하지 않습니다.
위의 명령을 사용하면 커밋 A는 Cherry pick에 포함되지 않습니다.제출 A를 포함하려면 다음 구문을 사용합니다.
git cherry-pick A^..B 

3. 구성 항목


git cherry-pick 명령의 일반적인 구성 항목은 다음과 같습니다.
(1)-e, --edit에서 외부 편집기를 열고 제출 정보를 편집합니다.
(2)-n, --no-commit은 작업 영역과 임시 저장 영역만 업데이트하고 새로운 제출이 발생하지 않습니다.
(3) - x가 제출한 정보의 끝에 한 줄 추가(cherry picked from commit...)편리한 후에 이 제출이 어떻게 발생했는지 알아낼 수 있습니다.
(4)-s,--signoff가 제출한 정보의 끝에 한 줄의 조작자의 서명을 추가하여 누가 이 조작을 했는지 나타낸다.
(5)-m parent-number, -mainline parent-number가 원시 제출이 하나의 합병 노드이고 두 지점의 합병에서 나온다면 Cherry pick은 기본적으로 실패할 것이다. 왜냐하면 어느 지점의 코드를 사용해야 하는지 모르기 때문이다-m 설정 항목은 Git에게 어느 지점의 변동을 채택해야 하는지 알려 줍니다.그것의 매개 변수parent-number는 1에서 시작하는 정수로 원시적으로 제출된 부모 지점 번호를 대표합니다.
git cherry-pick -m 1 

위의 명령은 Cherry pick이 커밋commitHash를 사용하여 번호 1의 부모 브랜치의 변동을 나타냅니다.
일반적으로 1번 부분기는 변동을 받아들이는 분기(the branch being merged into), 2번 부분기는 변동의 원천이 되는 분기(the branch being merged from)이다.

4. 코드 충돌


작업 중에 코드 충돌이 발생하면 Cherry pick이 중지되어 사용자가 작업을 계속할 방법을 결정하게 됩니다.
(1) --continue 사용자가 코드 충돌을 해결한 후 첫 번째 단계에서 수정된 파일을 임시 저장소(git add.)에 다시 추가합니다.두 번째 단계에서는 다음 명령을 사용하여 Cherry pick 프로세스를 계속합니다.
git cherry-pick --continue

(2) - abort에서 코드 충돌이 발생하면 합병을 포기하고 조작 전의 모습으로 돌아간다.
(3) - quit에서 코드 충돌이 발생하면 Cherry pick을 종료하지만 작업 전 모습으로 돌아가지 않습니다.

5. 다른 코드 라이브러리로 이동


Cherry pick 은 또한 라이브러리를 원격 창고로 추가하여 다른 코드 라이브러리로 전송하는 제출을 지원합니다git remote add target git://gitUrl 위 명령에 원격 창고 target이 추가되었습니다.
그리고 원격 코드를 로컬로 캡처합니다git fetch target 원격 코드 창고를 로컬로 캡처하라고 명령했습니다.
이어서 원격 창고에서 옮길 제출을 확인하고 해시 값을 가져오세요git log target/master 마지막으로git cherry-pick 명령을 사용하여 전송합니다git cherry-pick
기사 출처:http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

좋은 웹페이지 즐겨찾기