본문 바로가기

기타 개발 공부

Pycharm에서 Git 사용하기 (Merge, Rebase, Cherry-pick) - 2

이전 포스트에 이어서 Pycharm에서 Rebase와 Cherry-pick을 수행해보자.

Rebase로 두 branch 합치기

이전 포스팅과 비슷하게 두개의 branch (masterbranch 2) 를 준비하고, my_main.py 의 내용이 서로 다르게 세팅하였다. 이전 포스팅에서는 merge 로 두 branch를 합쳤지만,, 여기서는 rebase 로 두 branch를 합쳐보자!

아래와 같이 Git log tab에서 "merge 'branch1' into master"를 선택하면 rebase를 수행할 수 있다. 이름에서 알 수 있듯이, 이 동작을 수행하면 current master branch가 branch 2 위에 선형적으로 이어지는 형태를 갖게 된다.

현재 두 branch에서 my_main.py 파일이 다르게 때문에 곱게 rebase 할수는 없고 아래와 같이 conflict가 발생한다.

보통 sub 브런치에서 내용을 수정하는 경우가 많으니 branch 2 의 내용을 가져오도록 하자.

아예 master branch 파일의 내용이 branch 2와 동일하도록 만들었더니, commit 할 내용이 하나도 존재하지 않았다 ( Git lob tab에도 아무런 변화가 없다). 아래 그림과 같이 rebase 가 master HEAD 가 branch 2 HEAD 위에 올라타는 형태임을 감안했을때,, 추가 변경사항이 없으면,, commit 이 발생하지 않는것도 이해는 간다.

master branch에서 아래와 같이 추가적인 텍스트를 작성하고 Commit & Push 했더니 아래와 같이 Git log tab이 변경된 것을 확인할 수 있다. 위 그림과 동일한 모양이라 매우 만족스럽다..! 😀 👍

 

😀 Rebase, Merge는 두 개의 branch를 하나로 합친다는 점에서 (+ conflict resolution) 기능적인 차이는 존재하지 않는다. 

👉 Merge의 경우 각각 branch 에 대한 clear commit history를 남길 수 있고,

👉 Rebase의 경우 한 branch를 다른 branch에 흡수시켜 linear commit history를 유지할 수 있다.

Cherry-pick으로 commit 가져오기

Merge, rebase가 두개의 branch를 대상으로 합하는 명령어라면,, cherry-pick은 하나의 Commit 을 다른 branch 로 가져오는 명령어이다. (마치 cherry를 따는 것처럼 branch에서 commit만 하나 따오는 개념이다)

만약 측정 branch가 불안정하거나 master branch와 내용이 너무 많이 달라서 일부 commit 만 가져오고 싶을때 사용할 수 있다. (commit을 부지런히 해야 cherry-pick을 편하게 할 수 있을 것 같다.)

Pycharm에서 cherry-pick 을 직접 실행해보기 위해 아래와 같이 branch 3을 새로 만들고, 그 안에 cherry.py 라는 파일을 만들었다. cherry.py 파일 안에 3개의 프린트 문을 작성했으며, 각 문장을 완성할때마다 commit & push를 진행하였다.

아래 그림을 보면 branch 3 가 3개의 commit을 가지고 있고, master branch의 head는 이전에 머물러 있다.

여기서 딱 두번째 프린트문까지 작성된 cherry.py 를 가져오기 위해 branch 3의 딱 두번째 commit을 cherry-pick 해보자.

master branch로 checkout 한 다음, Git log tab에서 원하는 commit을 우클릭하여 "Cherry-pick"을 클릭해보자.

짜잔😲! master branch에 cherry.py 이 추가되었고, 그 내용은 branch 3의 두번째 commit과 일치하는 것을 확인할 수 있다. Git log tab의 commit graph도 위의 그림과 동일하게 그려졌다. (매우 만족! 😀)

 

여기에서 가져온 summary를 마지막으로 포스팅을 마무리하겠다. 😉

 

So, for summarising:

  • Use merge when you want to combine branches while preserving a clear integration history.
  • Use rebase when you want to maintain a linear commit history and incorporate changes from one branch onto another.
  • Use cherry-pick when you want to apply specific commits from one branch onto another.

이상 끝!! 💪👦🤜  

 

자료 출처

https://senali.hashnode.dev/git-cherry-pick

 

GIT Cherry Pick

git cherry-pick is a useful tool but not always a best practice.

senali.hashnode.dev

https://medium.com/@meghatyagi003/git-merge-vs-rebase-vs-cherry-pick-acfa46acb170

 

Git: Merge vs Rebase vs Cherry-Pick

As developers and DevOps engineers, Git plays a vital role in our daily lives. Also, everybody seems comfortable and pro in git, until you…

medium.com