예전에는 팀원이 적었기 때문에 작업 후에는 내 브랜치에서 → 마스터브랜치로 바로 git merge 하였다.
편하긴 하지만 커밋 이력을 보면 깔끔하지는 못했다. 요즘은 git rebase 으로 커밋이력을 관리 하고 있다. 과정이 merge 보다는 복잡하지만 커밋이력은 깔끔하다.
즉 rebase 와 merge 는 실행결과는 같지만 커밋 히스토리가 달라진다. (결과가 깔끔하냐 아니면 과정이 쉽게 가냐)
아래 사진을 보면 한눈에 차이점을 이해하기 쉬울 것이다. 자, 그럼 rebase 를 이해하러 가보자.
Git(27) git rebase 로 커밋관리하기
읽으며 이해하기
내 브랜치는 { 마스터 + 그 뒤로 작업한 코드 } 이다.
작업한 코드만 싹 잘라내기(git stash)하고, 임시공간에 따로 저장해놓는다.
내 브랜치는 { 마스터 } 만 남는다. 어딘가에 { 그 뒤로 작업한 코드 } 가 따로 임시 저장된다.
하지만 ㅠㅠ
그 사이 원격 마스터 브랜치는 { 마스터 + 영수님이 작업한 코드 } 로 업데이트가 되었다.
그래서 내 로컬 마스터를 git pull 로 최신으로 업데이트 한다.
내 브랜치의 { 마스터 } + { 임시공간에 저장된 코드 } 에서 마스터 부분만 업데이트(git rebase) 해준다.
그러면 내 마스터는 { 마스터 + 영수님이 작업한 코드 } + 어딘가에 { 임시공간에 저장된 코드 } 요렇게 최신으로 업데이트 되었다.
git stash pop 으로 { 마스터 + 영수님이 작업한 코드 + 그 뒤로 작업한 코드 } 를 다시 붙여넣기 하면 최신 업데이트가 된 fresh 한 코드가 된다.
이제 git add 와 git commit 으로 커밋을 마무리하고 push 까지하면 브랜치가 원격 마스터로 잘 저장된다.
그리고 작업 후에는 브랜치를 삭제 해주면 한줄로 된 깔끔한 이력만이 남는다.
코드로 이해하기
위의 내용을 코드로 풀어보자.
1. 일단 새로 작업하는 브랜치부터 만들고 시작하자.
git checkout -b chat # 브랜치 만들고 체크아웃해주기
2. 내 브랜치에서 마음껏 작업한다.
3. 작업 후, Staging 과 Commit 하지말고 ! 내 브랜치를 가장 최신으로 업데이트 먼저 해야한다.
그 다음 그 위에 작업한 코드를 얹어 최종적으로 업데이트할 것이다. 아래 명령어를 따라가보자
git stash # 이 명령어는 내가 작업한 코드를 임시 저장공간에 옮겨놓는다.
git checkout master # 마스터 브랜치로 이동
git pull # 원격 마스터를 -> 로컬 마스터에 업데이트 한다
git rebase master DAN-2 # 리베이스를 통해 마스터의 내용을 내 브랜치(DAN-2)에 업데이트하자
git stash pop # 스태시 팝으로 임시공간의 내 코드를 최신화된 내 브랜치에 얹어준다.
4. 이로써 내 브랜치(DAN-2)는 최신화 + 그 위에 내 작업물까지 얹어졌다. Staging 부터 쭉쭉 진행하자.
git add . # 스테이징하고,
git commit -m 'add filter' # 커밋도 해주자
5. push 로 마무리까지 해주자.
git push origin DAN-2 # 이렇게 되면 local과 저장소의 remote branch가 자동생성된다.
BitBucket 에서,
6. BitBucket 으로 들어가 Pull requests - Create pull request 를 한다.
8. Pull request 를 하면 된다. (이 때 전체 task 완료 시에만 빨간박스로 표기된 Delete branch 체크 해준다.)
** 브랜치를 삭제해주는 이유는 개발이력을 master 만 남겨 여러명이 함께 작업할 때, 깨끗한 git history를 유지하기 위해서이다.
9. pull request 다음 화면이다. 마지막으로 틀린건 없는지 코드 비교해보고 Merge 를 누른다.
여기까지 오신 당신은 이제 눈감고 명령어를 친다는 git 의 베프가 되었다.
귀찮은 개발자는 멈추지 않는 법, 내친김에 JIRA 까지 연동해서 어떻게 사용할까 궁금하다면? ↓↓↓
'Git' 카테고리의 다른 글
Git(29) git stash 란 (0) | 2021.09.08 |
---|---|
Git(28) git reset 으로 삭제한 커밋 원래대로 되돌리기 (0) | 2021.09.05 |
Git(26) Jira와 BitBucket 을 연동한 개발 과정 (0) | 2021.08.31 |
Git(25) git commit --amend 커밋 수정 후 덮어쓰기 (0) | 2021.08.30 |
Git(24) Private Repository 다른 사람과 공유하기 (0) | 2021.08.15 |
댓글