TIL 53 | Git flow & rebase

dabin *.◟(ˊᗨˋ)◞.*·2021년 10월 26일
1

etc

목록 보기
9/14
post-custom-banner

Git Flow


이미지출처

지금까지 로컬에서 사용한 branch는 feature/login과 같이 main 브랜치에서 바로 feature 브랜치를 사용했다. 현업에서는 main develop feature 브랜치를 많이 사용한다. main은 배포해서 사용자들이 사용할 코드들이 담겨있다. ver1.0이 배포되었다면 유지보수를 시작하고, 다음 버전 개발을 시작한다. 개발하며 머지를 시킬텐데, 사용자들이 바로 볼 수 있게 되면 안된다. 아직 미완성인 기능이 많기 때문! 따라서 main 브랜치에서 develop 브랜치를 만들어 다른 버전을 준비하게 된다. 이제부터 develop 브랜치에서 feature 브랜치를 파도록 해보자.

feature 브랜치 commit들은 develop 브랜치로 머지가 된다. 이제 main에 변화가 생기면 develop에서 git merge main을 해서 사용한다. 다른 버전을 준비했다면, release 브랜치를 만들어 버그를 찾고 수정한다. 수정을 했다면 develop 브랜치에 머지한다. feature 브랜치에서는 변동사항이 있다면 꼭 pull을 받아야 한다. 모든 개발이 완료되었으면 develop 브랜치에서 main 브랜치로 머지하여 사용자들이 사용할 수 있게 한다.

배포를 했다고 가정하자. 하지만,, 급하게 버그를 찾게 되는 경우 hotfix 브랜치를 파서 아주 재빠르게 코드를 수정한다. 이후 바로 main 브랜치에 머지한다. main 브랜치에 업데이트가 되면 develop 브랜치도 pull, feature 브랜치들도 pull을 받아야 한다.

배포할 때!

git flow init

production release? main
integration of the next release? develop
supporting branch? feature/

Git rebase

Merge & Rebase 공통점

  • git merge는 특정 브랜치에 있는 커밋을 다른 브랜치로 가지고 올 때 사용했다. rebase 또한 같은 역할을 한다.

Merge & Rebase 차이점

  • git merge를 하게 되면 다른 commit들이 시간 시간 순서대로 쏙쏙 들어오게 된다. 이렇게 되면 불필요한 merge commit 들이 생기게 된다. 또한 project history가 복잡해진다.
  • git rebase의 목적은 늦게 merge하는 commit들을 뒤로 가게 하기 위함이다. 이렇게 되면 같은 작업을 진행한 commit끼리 묶을 수 있고 불필요한 merge commit을 제거할 수 있다.

re'base'인 이유


이미지출처

내 commit의 base를 변경하여 commit history를 일렬로 잘 정리해준다!

이번 프로젝트에서는?

[새로운 작업 모두 마치고 push 전에]

1. remote main을 pull
git pull main
2. feature branch 이동 
3. push 전에 git merge 대신
git rebase -i main

[rebase 하는 동안 squash 진행할 때]

1. 가장 오래된 commit을 pick
2. 다른 커밋 메세지는 가장 오래된 commit 기준으로 squash
(다른 커밋의 작업 내역이 없어지는 것은 아님)
3. Esc -> :wq!로 창에서 빠져나온다

[수정용 에디터가 하나 더 나타나면]

1. 최종적으로 rebase된 커밋의 내용 작성
(현재까지 적은 커밋 메세지가 뜨는데, 불필요한 내용 제거하고 정 내역에 대한 메세지 작성)
2. Esc -> :wq!
3. successfully rebased! 메세지 확인 후 push

[push하기]

rebase하다보면 history가 달라진다. 
git은 history가 다른 branch의 Push를 허용하지 않는다. 
이 때 
1. git push origin feature/login -f

[rebase중 충돌 해결]

1. 충돌나는 코드 수정 후 git add .
(수정사항이 없으니 commit은 하지 않는다)
2. git rebase --continue
3. 해결이 안되면 git rebase --abort
(rebase 전으로 돌아감)

[유용한 git 명령어]

git reset soft || hard
git log
git reflog
git checkout <commit>
git stash
git stash apply
git stash clear
profile
모르는것투성이
post-custom-banner

0개의 댓글