GIT
으로 버전관리를 하다보면 커밋을 다른 브랜치에 잘못 저장하거나 더이상 필요없는
커밋이 생기거나 또는 코드의 의존성 때문에 다른 개발자의 커밋 중 일부를 가져와야 하는
상황이 생길수도 있습니다.
이런 경우에서 사용되는 명령어인 cherry-pick
에 대해서 알아보겠습니다.
git cherry-pick [가지고올 커밋ID]
# 커밋버전을 현재 branch에 병합 합니다.
git cherry-pick 1515ad 2415fd
# 두 개의 커밋버전을 현재 branch에 병합 합니다.
# 두 개 이상도 가능하다.
commit을 가지고 올 때, commit의 내용과 현재 브랜치의 내용이 동일할 수 있습니다.
이런 상황에서 충돌(confilct)이 발생하게 됩니다.
✔️ 충돌 문제를 해결하기 위해서 3 way merge 방법을 사용하는데, 이 방법에서 조상이 되는
base commit은 가져올 commit의 전 버전이 base commit 됩니다.
1. 새로운 저장소 생성 및 버전 생성
2. 브랜치 생성
3. main 브랜치에서 여러개의 버전 생성
4. topic 브랜치에서 여러개의 버전 생성
5. topic 브랜치에서 생성한 t2 버전을 main 브랜치의 m2 버전에 병합 하려고 함
6. main 브랜치에서 topic의 일부 커밋을 병합
이전에 실습했던 내용을 초기화 하고, 새로 커밋을 합니다.
1. main branch
저장소 초기화 및 파일 생성
2. topic branch
생성 후, main branch
에서 2개 버전 생성
3. topic branch
에서 3개의 버전 생성
4. main branch
에서 topic branch
에 commit t3버전을 cherry-pick 진행
4.1 cherry-pick 하는 과정에서, 충돌이 발생해 3 way merge으로 해결해야 합니다.
4.2 3 way merge을 하는 과정에서 base commit
이 되는 커밋은 가져오려고 하는 커밋의
이전 버전이 됩니다.
즉, commit t3버전의 이전 버전인 commit t2를 base commit
으로 비교하게 됩니다
5. mergetool을 사용해서 충돌 해결
6. 충돌 해결 후에 결과 확인