[git] cherry-pick 본문

우아한테크코스 4기

[git] cherry-pick

giron 2022. 3. 2. 12:14
728x90

내 질문도 있지만..62개

로또 미션을 진행하면서 리뷰 폭탄에 정신없이 해결해야겠다고 생각해서 rebase를 진행하지 않고 step1 브랜치에 바로 진행을 했다.

열심히 코드를 리펙토링 하고 마지막에 리뷰 요청을 보냈는데 충돌이 발생해서 충돌을 해결하고 요청을 보내라고 했다..

 

git cherry-pick vs git rebase

간단히 다른 브랜치의 커밋 기록을 현재 브랜치로 가져올 수 있는 기능이다.

git rebase와 비슷한 성격이지만 조금 다르다.

rebase는 현재 브랜치에서만 가능하고 다른 브랜치에서 commit을 가져오려면 merge를 한 후 rebase를 해야 한다.

반면에 cherry-pick은 이러한 과정 없이 바로 다르 브랜치의 commit#만 알면 가능하다는 장점이 있다.

하지만 cherry-pick은 같은 내용을 갖는 커밋이 여러 군데 생기므로 협업할 때는 지양하는 게 좋다고 한다.

 

상황

작업한 내용을 merge 할 곳은 gyuchool 브랜치이다.

 

step1에서 작업을 했고 merge를 한 후, 원래는 rebase후 step2 브랜치를 만들어서 진행했어야 했다.

하지만 merge이후 아무런 조치 없이 바로 step1 브랜치에서 계속 작업을 진행했고 작업을 끝냈다.

 

이러한 작업들을 merge이후 step2에서 작업한것처럼 커밋기록을 옮겨주고 다시 merge시켜려고 한다.

적용

  1. git checkout gyuchool
  2. git remote add {저장소_별칭} base_저장소_url
    ex) git remote add upstream https://github.com/woowacourse/java-racingcar.git
  3. git fetch upstream gyuchool
  4. git branch -a
  5. git rebase upstream/gyuchool
  6. git checkout -b step2
  7. git log - 머지했을 때 log가 젤 먼저 보일 거임
  8. git cherry-pick {first_commit#} - 머지 한 바로 다음부터(잘못의 시작부터..)
  9. git cherry-pick {first_commit#}..{last_commit#}
  10. git push -u origin step2

성공!

step1의 merge이후부터 커밋 기록이 잘 기록되었다.

 

Reference

 

 

 

728x90
Comments