ㅇ.ㅇ
[Git] cherry-pick 본문
반응형
상황
이번에 다른 피처 브랜치에서 개발한 기능을 현재 최신 브랜치에 병합하는 작업을 해야한다. 어떻게 해야할지 생각을 해보다가 책임님께서 merge와 rebase, cherry-pick을 힌트로 주셔서 실행으로 옮기기 전에 개념을 정리해보려고 한다.
뭔가 익숙하지만 확실히 알고있는게 없었다.
Cherry-pick 이란?
- 다른 브랜치에 있는 커밋을 선택해서 내 브랜치에 적용할 때 사용하는 명령어
- 커밋 자체를 옮기는게 아니고 같은 내용을 가지고 있는 커밋을 하나 더 생성하는 것이므로 전체 히스토리를 보았을때는 커밋이 늘어나는 것이다. 그러므로 꼭 필요할 때만 사용할 것!
// 체리픽 명령어
git cherry-pick <커밋 해시1>
// 여러 커밋을 한꺼번에 하고싶을 때
git cherry-pick <커밋 해시1> <커밋 해시2>
// 연속적인 커밋일 경우 (커밋해시2~ 커밋해시5)
git cherry-pick <커밋 해시1>..<커밋 해시5>
// 연속적인 커밋일 경우 (커밋해시1~ 커밋해시5)
git cherry-pick <커밋 해시1>^..<커밋 해시5>
- 위처럼 '^'을 사이에 넣어주면 커밋 해시1부터 5까지 모두 가져온다. 이런 방식은 체리픽 뿐만 아니라 rebase나 revert 등의 다른 명령어도 동일하니 알아두면 좋음!
(예시)
feature/branch1 브랜치의 커밋 중 123asdf와 789asdf 커밋을 현재의 master 브랜치에서 적용하고 싶다.
// 해당 커밋을 가져오려는, 현재 나의 브랜치로 이동
git checkout master
git cherry-pick 123asdf 789asdf
그럼 결과는 이렇게 바뀐다. 짜란-
다른 Cherry-pick 옵션
Merge Commit Cherry-pick
만약 머지 커밋에 대해 체리픽을 원한다면
get cherry-pick -m 1 <머지 커밋 해시>
Cherry-pick 충돌
충돌 해결 후 계속 체리픽 진행
// 먼저 충돌난 코드를 수정한다
git add {충돌난 파일경로}
git cherry-pick --continue
Cherry-pick 중단
git cherry-pick --abort
// 이렇게 되면 이전 상태로 돌아간다
Cherry-pick 스킵
해당 커밋은 체리픽 스킵하고 싶다면?
git cherry-pick --skip
Cherry-pick 커밋 안하기
커밋하지 않은 상태로 체리픽 하고 싶다면?
git cherry-pick --no-commit <커밋1>
git cherry-pick --no-commit <커밋2>
git commit -m "합쳐진 변경 사항"
반응형
'Today I Learned' 카테고리의 다른 글
[Java] FilenameUtils 사용하기 (1) | 2024.10.13 |
---|---|
[Java] Utility Class (0) | 2023.04.23 |
[Java] HashSet (0) | 2023.03.10 |
[Tomcat] tomcat - work directory (0) | 2023.03.09 |
[Tomcat] 톰캣 하나에 여러 사이트 구축 (0) | 2023.03.07 |