Recent Posts
Recent Comments
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
관리 메뉴

ㅇ.ㅇ

[Git] cherry-pick 본문

Today I Learned

[Git] cherry-pick

yun_ 2023. 3. 17. 13:36
반응형

 

상황

이번에 다른 피처 브랜치에서 개발한 기능을 현재 최신 브랜치에 병합하는 작업을 해야한다. 어떻게 해야할지 생각을 해보다가 책임님께서 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