본문 바로가기

기타 개발 공부

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

Pycharm 에서는 편리하게 Git을 통해 remote 저장소에 내 코드를 연결하고 merge, rebase,  cherry-pick 등 다양한 버젼 관리 기능을 제공한다. 그런데 나도 들어만 봤지 제대로 사용해본 적은 아직 없기 때문에 이 글에서 Pycharm을 통해 merge,  rebase, cherry-pick 을 직접 실행해보며 공부를 좀 해보려한다. 

(대부분의 설명과 그림은 링크를 참고했다) 

원격 저장소 연결하기

외부 저장소에 프로젝트를 연결했고, 간단한 commit & push 도 진행한 상황

새로운 branch 만들기

이제 merge,  rebase, cherry-pick 를 수행하기 위해서 branch를 분기시켜보자.

"First commit" 이라는 commit 에 우클릭 > new branch 을 통해 새로운 branch 1을 생성했다.  

branch 1이 만들어진 이후 바로 checkout (해당 HEAD로 이동하는 것) 까지 수행하는 것을 확인할 수 있다.

branch 1 에서 간단한 코드를 작성하고 Commit & Push 를 진행하였다. 아래 Log tab 에 새로운 commit과 새로운 branch (branch 1) 가 추가된 것을 확인할 수 있다. 

👍 remote 는 remote 저장소의 default 이름이고, master 는 main branch의 default 이름이다.

👉 Log tab 설명 참고를 위한 Pycharm 공식 manual 링크

❗😃👍 아직까지는 main branchbranch 1의 내용이 충돌하지 않기때문에 (지금은 새로운 코드가 추가된거지, 이전 코드가 훼손된 경우가 아님) Git log graph가 쪼개지지 않는다. 

 

이제 main branch로 checkout하고 새로 commit & push를 진행시키고 Git log graph를 쪼개보자.

Git log graph를 보면 이제 두개의 branch (master, branch 1) 이 분리된 것을 확인할 수 있다. 동일한 코드 파일 (my_main.py) 에서 서로 충돌하는 print 문이 있기 때문에 이전과 달리 분기가 일어난 것이다.

 

이제 merge를 사용해서 두개의 branch를 합쳐보자. Master branch 로 checkout을 해보면, 다음 두가지 선택지가 있다.

두경우 모두 branch 1에서 발생한 변경사항을 현재 checkout 되어 있는 master branch에 편입시키는 명령어이다.

Merge로 두 branch 합치기

master에 checkout 되어 있는 상태에서 branch 1을 우클릭하고 merge 'branch1' into master 를 실행시켜보자.

현재 두 branch에서 my_main.py에 작성된 내용이 다르기 때문에 위와 같이 conflict가 발생한다. 이 경우 masterbranch 1 둘 중 하나의 내용을 사용하여 conflict 를 resolve 해야하는데 Pycharm의 경우 Merge... 버튼을 클릭하면 매우 편리하다.

Merge... 버튼을 클릭하면 위와 같은 별도의 Merge Revision 창이 뜨는데 여기서 어떤 branch 로부터 어떤 내용을 선택할지 '>> or <<' 버튼을 클릭하여 간단하게 고를 수 있다. 이 경우에선 오른쪽 branch 1의 변경사항을 선택해보자.

오른쪽 branch의 '<<' 버튼을 누르고 Apply 를 눌러 merge를 완료해보자.

짜잔😲! my_main.py 의 내용이 branch 1의 것으로 변경되었고, Git log tab 에서도 두개의 branch가 합쳐진걸 볼 수 있다.

 

내용이 길어져서 rebase와 cherry-pick은 다음 포스트에서 마저 진행해야겠다.

 

이상 끝!! 💪👦🤜

 

출처 참고

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

https://kotlinworld.com/277

 

[Git] git merge 한 번에 정리하기 : Fast Forward Merge, Commit Merge, Conflict Merge

Git merge란? git branch를 다른 branch로 합치는 과정을 merge라 한다. merge의 기본 단위는 브랜치이며, git merge 명령어로는 커밋 단위로 합치기가 불가능하다. Fast Forward Merge 가장 기본적인 merge는 바로 Fas

kotlinworld.com