[Git] cherry-pick

Nine·2022년 3월 17일
1

Git

목록 보기
4/4

공부하게 된 동기

  • 나만의 유튜브 강의실 1단계 미션 리뷰를 진행하는 과정에서 저와 리뷰어님과 소통이 살짝 어긋났어요.

로컬에서만 commit을 진행하고 push는 하지 않은 상태에서 merge가 되어 버렸습니다🤣🤣

  • 2단계 미션을 진행하기 위해서는 woowa-course 나만의 유튜브 강의실을 upstream으로 지정하고 merge되었던 저의 브랜치를 rebase해야합니다.

  • 그치만 rebase하면 제 로컬에서 commit된 이력을 반영할 수 없었어요.

그 때 든 생각! 커밋 이력이 몇 개 안 되니, 그냥 하나씩 다시 코딩할까?

  • 하지만 이건 개발자답지 못한 생각이죠? 분명 방법이 있을 것이라고 생각하고 공부를 하게 되었어요.

git cherry-pick 사용법

git cherry-pick은 특정 브랜치에서 원하는 커밋을 가져올 때 사용합니다.

한 개의 커밋을 cherry-pick 하기

(A는 커밋 해시입니다.)

git cherry-pick A

커밋 해쉬는 어떻게 확인하냐구요?
git log --oneline 명령어를 통해 원하는 커밋 해쉬를 가져올 수 있습니다.


여러 개의 커밋을 cherry-pick 하기

(A와 B는 커밋 해시입니다.)

  • 커밋 A부터 커밋 B까지 cherry-pick
git cherry-pick A^..B

A를 무시하고, A 다음부터 B까지 cherry-pick

git cherry-pick A..B

우테코 나만의 유튜브 강의실 미션에서 내가 적용한 방식

  • Git 초보라 이걸 알아 내는데 3시간이 걸렸다니😭😭
  • 하지만 진짜 삽질한 시간 만큼 얻고 가는 부분이 많아서 좋네요.

PR merge 되었는데 로컬에 commit 이력이 남아 있는 경우

1. git push (woowacourse는 반영 안되고 fork한 저장소에만 적용된 상태)
2. git checkout main
3. git remote add upstream [우아코스 주소]
4. git fetch upstream [내 브랜치]
5. git rebase upstream/[내 브랜치] 인데 이렇게 하니깐 충돌이 안나네요)
6. git checkout [step1]
7. git log —oneline
    - 로그를 확인하고 어디서 부터 어디까지 적용할지 커밋id를 가져와요.
8. git checkout -b [step2]
9. git cherry-pick 커밋해쉬..커밋해쉬

생각해보니..

우테코에서 첫 미션인 자동차 경주를 할 때 였어요.

그 당시에는 rebase 존재 자체를 모르고 2단계를 시작했었어요.

당연히 step1 merge가 일어나면서 제가 fork 받은 브랜치랑 upstream 브랜치의 싱크가 깨지게 되었죠.

이 부분을 공부해도 이해가 안 되어서 리뷰어님께 여쭤봤었는데

upstream 브랜치 기반으로 branch를 새로 만들고 git cherry-pick을 통해 step2 commit을 전부 다시 한다.

라는 방법을 알려주셨었습니다.

  • cherry-pick이 무엇인지를 알게 되고 나서 이제야 그 때 당시의 리뷰어님께서 왜 이런 방법을 알려주셨는지 이해가 되네요!
profile
함께 웃어야 행복한 개발자 장호영입니다😃

0개의 댓글