Skip to content

Git rebase를 이용한 commit, pull request, merge

Jongtae Park edited this page Jan 14, 2022 · 4 revisions

git rebase란?

  • branch의 base를 재배치하는 기능으로써 주로 commit 수정/삭제/삽입/병합 등의 기능을 활용할 때 쓰거나 쓸데없는 merge commit을 남기지않고 깔끔하게 main branch history를 관리하기 위해 사용한다.
  • ref: https://velog.io/@kwonh/Git-Rebase%EB%9E%80

branch

  • branch naming은 <issue type>/<issue-number>-<branch-name> 형식으로 짓는다.
    • ex) feat/24-axios-config
  • 항상 개발을 진행할 때는 master(main) 브랜치에서 체크아웃해서 진행을 하고 다른사람의 브랜치를 체크아웃받아서 같이 진행하지 않도록 한다. (rebase를 이용하여 작업하면 commit history가 아예 바뀌기때문에 다른사람과 sync가 맞지 않게되어 graph가 꼬이게 되므로 하면 안된다.)
  • 브랜치를 따서 작업 중 master 브랜치에 병합이 된 내역을 적용해서 해야할 경우 다음과 같이 진행한다.
    $ git switch master
    $ git pull
    $ git switch <my-branch>
    $ git rebase master
    
  • conflict가 발생할 경우 자연스럽게 merge할 수 있도록 interface가 제공된다.

commit 단위

  • 커밋은 하나의 이슈를 최소 기능단위로 쪼개서 하는 것을 권장한다.
    • ex) 로그인페이지 개발(issue)
      • commit1: 로그인 페이지 api interface 작성
      • commit2: 로그인 query 작성
      • commit3: 테스트 작성
  • 커밋 컨벤션은 Angular commit convention 참고

PR

  • 이슈 개발이 끝나면 PR을 올리게되고 리뷰어들이 소스마다 리뷰를 달게되는데 소스를 수정해야될 경우 소스 수정에 대한 커밋을 쌓는게 아니고 고쳐야되는 history로 돌아가서 수정한 뒤 git push --force origin 으로 덮어씌운다.
  • git rebase commands
    • git rebase -i HEAD~n : HEAD로 부터 n번째 history까지 interactive를 할 수 있도록 한다. ( HEAD~n 대신 git rebase -i <commit hashcode> 를 사용해도 된다 )
    • 위 명령어를 실행하면 commit log list가 보이는데 각 커밋에 pick이라는 태그가 붙어있다. tag별로 각 기능이 있는데 자주쓰는 tag로는 edit, reword, drop 등이 있다.
    • 각 커밋에 원하는 태그로 수정 후 저장하면 해당 커밋에 달려있는 태그의 기능이 실행된다. ( ex: A라는 커밋의 태그를 edit으로 고치고 저장하면 A커밋을 했던 때로 되돌아간 뒤 소스를 수정할 수 있게된다. )
      • 만약 rebase 후 할게 없으면 git rebase --skip 명령어로 넘어갈 수 있다
    • 되돌아간 history에서 작업을 끝내면 git rebase --continue 명령어를 실행해 다음 rebase 지점으로 넘어간다. 모든 rebase 작업이 마무리되면 git push -f origin 명령어를 실행해 PR에 올라가있던 commit내역을 강제로 바꾼다
  • 리뷰가 마무리되면 git rebase merge 를 실행해서 merge commit이 남지 않도록 진행한다.
Clone this wiki locally