티스토리 뷰
[Git flow] release finish 할 때 master의 tag가 develop으로 merge되는 이유를 찾아보았다
pansy0319 2021. 1. 26. 04:21git release를 사용하다가 뭔가 이상한걸 발견했다
우선 터미널에서는
$brew install git-flow-avh
명령어로 설치해서 사용하고 있고
소스트리에서는 내장된 git-flow를, git kraken도 아마 내장된 git-flow를 사용하는듯 하다
각각의 툴에서 release finish를 할 때 조금씩 다른 것을 발견했다
내가 공부한 release finish는 release branch를 devleop에 merge하고 master(main)에 merge하는 것이었는데
git kraken은 내가 생각한대로 동작하였고
terminal이랑 sourcetree에서는 release branch를 mater branch에 merge한 후 mater branch를 develop에 다시 merge하는 모습을 보였다 진짜 왜 이러지?
commit message랑 git kraken과 source tree에서 그래프를 비교해보았다
terminal에서 git flow release finish [RELEASE] (옵션x) 실행 | sourcetree | gitkraken | |
message | master : Merge branch 'release/RELEASE' develop : Merge tag 'RELEASE' into develop |
master : Merge branch 'release/RELEASE5' develop : Merge tag 'RELEASE5' into develop |
master : Merge branch 'release/kraken1' develop : Merge branch 'release/kraken1' into develop |
gitkraken으로 본 graph |
release finish를 하는 방식이 세가지가 달라서!왜 다를까!를 찾아보았다
일단 내가 brew로 설치한 git-flow-avh를 찾아봤는데 이 branching model에 대한 연산을 제공한다고 한다
이 branching model의 release finish 방식을 보니,,,아래의 순서로 finish를 하고 있었다
$ git checkout master
$ git merge --no-ff release-1.2
$ git tag -a 1.2
$ git checkout develop
$ git merge --no-ff release-1.2
$ git branch -d release-1.2
여기서 merge할 때 --no-ff라는 옵션이 생소해서 찾아보았다
merge시 --ff가 기본 옵션이었고 ff는 fast-foward를 의미하였다
--ff로 merge하면 merge할 commit이 fast-foward 관계면 따로 merge commit을 만들지 않고
--no-ff로 merge하면 무조건 merge commit을 만들고 merge한다
말로 하는 것보다 그림이 이해가 빠르다
이러하다
암튼 잠시 다른길로 샜는데 위의 branching model로 release finish를 한다면
이런 그림이 될 것이다
근데 왜 terminal이랑 sourcetree에서 release finish를 할 때 master 브랜치에 붙인 tag가 develop으로 merge되는 것일까?
github에서 release 쪽 소스 코드를 까보다가 wiki 참고해서 여러 옵션들을 주면서 실험해봤다
- 우선 그냥 하던거처럼 option 따로 주지 않았을 때
(--showcommands는 그냥 뭐 실행했는지 보여달라는 option)
$ git flow release finish RELEASE --showcommands
git checkout master
git merge --no-ff release/releaseA
git checkout master
git tag -a RELEASE
git checkout develop
git merge --no-ff RELEASE
git branch -d releae/RELEASE
Summary of actions:
- Release branch 'release/releaseA' has been merged into 'master'
- The release was tagged 'releaseA'
- Release tag 'releaseA' has been back-merged into 'develop'
- Release branch 'release/releaseA' has been locally deleted
- You are now on branch 'develop'
- -b 옵션을 주었을 때
-b 옵션은 nobackmerge를 뜻한다. ~ don't back-merge master, or tag if applicable, in develop
(back-merge에 대한건 이 글을 참고) (+ 따로 살짝 정리해 봤다 링크 2022.04.11 추가)
이 option을 주면 master나 master의 tag를 develop에 merge하지 말라는 것 같다(이게 디폴트가 아냐?!)
어쨌든 위 옵션을 줘서 첨부터 착착 실행해보았다
$ git flow feature start B --showcommands
git config --local gitflow.branch.feature/B.base develop
git checkout -b feature/b develop
Summary of actions:
- A new branch 'feature/B' was created, based on 'develop'
- You are now on branch 'feature/B'
~~~ 작업 ~~~
$ git flow release start releaseB --showcommands
git config --local gitflow.branch.release/releaseB.base develop
git checkout -b release/releaseB develop
Summary of actions:
- A new branch 'release/releaseB' was created, based on 'develop'
- You are now on branch 'release/releaseB'
~~~ feature 브랜치를 release 브랜치에 merge ~~~
$ git flow release finish releaseB -b --showcommands
git checkout 'master'
git merge --no-ff release/releaseB
git checkout 'master'
git tag -a releaseB
git branch -d release/releaseB
git checkout develop
git merge --no-ff 'release/releaseB'
git branch -d release/releaseB
Summary of actions:
- Release branch 'release/releaseC' has been merged into 'master'
- The release was tagged 'releaseC'
- Release branch 'release/releaseC' has been merged into 'develop'
- Release branch 'release/releaseC' has been locally deleted
- You are now on branch 'develop'
그러고나서 develop 브랜치의 commit message를 확인했다
오오오!!!!!!!!!!!!!!!
그러고 나서 git kraken에서 그래프도 확인해봤다
오!!!!!!!!!!!!!!
그렇다 -b 옵션을 주면 develop 브랜치에 master의 tag가 아닌!release 브랜치가 바로 merge된다
내가 원한(그리고 공부한) git release finish는 바로 이거였다
내 생각이지만 git kraken은 release finish 칠 때 자동으로 -b 옵션을 넣어주나 보다
이걸 찾아보면서 헷갈렸던 점은 소스트리에서 release finish를 할 때
밑에 preview를 저런식으로 넣어줘서 헷갈렸다ㅠ
develop branch에는 'Merge release/RELEASE3 into d~~' 이렇게 적혀있어서 당연히! release branch가 develop에 merge될줄 알았지만!
실제로 OK 버튼 누르고 실행하면
이런식이다(와 오늘 첨으로 소스트리에서 실행한 명령어 보는 방법 알았다..인생)
-f 옵션만 주는데 이건 messagefile과 관련된 옵션이다(브랜치 merge에는 영향을 미치지 않는다는 소리!)
git kraken은 어떻게 실행했는지 알고 싶어서 찾아봤는데
ㅠ이런 로그 밖에 없었다 궁금한데!!
-b 옵션 줘서 실행하지 않나 생각중이다(commit message 등을 보았을 때)
이제까지 공부한 git flow를 보면 마지막에 merge할 때 releae를 develop에 merge하는게 default여야될거 같은데 어째서 tag를 develop에 merge하는게 default인지 모르겠다,,,
git의 세계는 심오하고 어려운 것이다,,,
+) 이것저것 찾아보다가 google에 git flow nobackmerge에 대해서 검색해봤는데
ㅋㅋㅋㅋㅋㅋㅋ
2011년에도 해당 문제를 제기한 사람이 있는듯한데 그냥 변경해줄 생각이 없는거 같당ㅇㅅㅇ
해당 문제에 대해 정리해준 포스트를 찾았는데 한번씩 읽어보면 좋을듯 하다(링크)
해당글에서 git config를 변경하는 것을 제안해줬는데 나도 좀 해봐야겠다ㅠㅡㅠ
이거 때문에 부서에서 이슈 생긴적이 있는데 정리해서 공유 좀 해야될듯
개인 적으로 feature 병합할 때 ff가 default 된건 별로인거 같다 그래프 해석하기 복잡쓰
+) commit 메세지 해석하기
Merge bracn 'release/A' : master 브랜치에 release/A 브랜치를 병합
Merge branch 'release/A' into develop : develop 브랜치에 release/A 브랜치를 병합
Merge tag 'A' into develop : develop 브랜치에 A태그를 병합
* 참고
- git flow 종류 : ujuc.github.io/2015/12/16/git-flow-github-flow-gitlab-flow/
- git branching model : nvie.com/posts/a-successful-git-branching-model/
- git-flow-avh : github.com/petervanderdoes/gitflow-avh
'이게외않되?' 카테고리의 다른 글
[kubernetes] pod 난리났을 때 delete하고 다시 helm 배포하기 (0) | 2021.05.21 |
---|---|
[kubernetes] Init:ImagePullBackOff 에러 (docker pull limit) (0) | 2021.05.21 |
[Git Flow] 개념 정리 (0) | 2021.01.25 |
[github blog] 한국 시간대로 time zone 세팅하기 (1) | 2020.12.22 |
[github blog] 로컬 github blog 실행시 jekyll plugin dependency 에러 해결 방법 (0) | 2020.12.22 |
- Total
- Today
- Yesterday
- 쿠버네티스
- ImagePullBackOff
- docker for mac
- 도메인주도설계
- gasmask
- cacheable
- 코틀린
- Kubernetes
- k8s
- 자바
- ddd
- JavaScript
- Spring
- 스프링
- 도커
- clean code
- back merge
- gradle
- 스프링부트
- docker
- springboot
- kotlin
- 클린코드
- QuickTimePlayer
- linuxkit
- kotlin In Action
- java
- 자바스크립트
- docker pull limit
- IntelliJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |