브랜치 개념
-
main 브랜치에서 어려명이 동시에 작업을 진행하면 꼬인다.
따라서 각각의 개발자는 따로 자신만의 기능별 브랜치를 생성한다.
-
main 브랜치에 직접적으로 작업을 하지말고, 각자 새로운 브렌치를 파고 작업을 한후에 나중에 PR 을 올려서 main 에다 merge 를 시킨다.
- 위처럼 main 브렌치에 커밋을 생성했을 때, 여기서 개발자는 따로 브랜치를 생성해서 작업을 위처럼 진행하면서, 자신만의 브랜치 안에서 커밋을 계속 생성하고 작업을 진행할 수있다.
- 각 브랜치에서 진행한 커밋 및 작업을 한 내용을 원격(origin)에다 PR 을 올린다.
그러고 PR 을 merge 하면 main 브랜치에 아래 그림처럼 각 브랜치에서 진행한 커밋 & 작업 내용이 반영이 된다.
- 또 개발자 A 가 지금껏 작업한 내용을 PR 을 올려서 Merge 가 main 브렌치에 이루어졌을텐데,
개발자 B 도 자신만의 브랜치를 생성후 로컬에서 작업을 하다가 PR 을 올리고 Merge 를 한다면 아래와 같을 것이다.
브랜치 명령어 + PR + Merge 하는 과정에서 필요한 명령어
브랜치 생성 및 바꾸기 : git checkout -b feature/accounts_login
-
버전 생성시 : angular js 커밋 메시지 규약에 따라서
- git commit -m "docs: new feature_2" 와 같이 작성하는 것이 좋다!
-
push 할때
-
git push origin main : 원격(= origin = 깃허브) 중에서 main 브랜치에다 push 하는것
(* main에 push 하지말자!)
-
git push origin feature/accounts_login : 원격(= origin = 깃허브) 중에서feature/accounts_login 브랜치에 push 하는것
-
push 을 하면 원격(origin = 깃허브) 에는 우리가 생성한 브랜치가 push 되었지만, main 브랜치에 아직 PR 및 merge 가 되지 않아서 브랜치의 내용을 PR 을 날려줘야 한다.
- 위 처럼 PR 을 날릴것인지 말건지에 대한 문구가 뜨면 클릭해서 PR 을 작성하면 된다.
- 클릭시 위처럼 뜨는데, 위의 4개에 적힌게 뭐나면 순서대로
- base 레포지토리
- base 브랜치 ( = 병합을 할 브랜치. 즉 base 브랜치는 대부분 프로젝트에서 곧 main 브랜치가 될것이다. )
- 개발자(우리)의 레포지토리
- 개발자의 브랜치 ( = base 브랜치에다 merge를 하고싶은 우리의 브랜치 )
이다.
rebase 에 필요한 개념 + 명령어
-
origin 이란?
-
git remote add upstream "등록할 원격 저장소 주소"
- fork 를 했을때 기존 원격 저장소를 추가하는 과정이 필요함
=> 명령어 : git remote add upstream "https:~~"
=> 지정해준 주소를 upstream 이라는 별명으로 원격 저장소를 등록하겠다는 뜻
아래처럼 git remote -v 명령어로 원격 저장소를 확인해보면,
우리가 fork 한 원격 저장소에는 별명이 origin 으로 그대로 유지되고있고,
fork 를 받은 기존의 원격 저장소에는 별명이 upstream 으로 새롭게 붙은 것을 볼 수 있다!
- upstream 을 왜 등록했나면, rebase 을 꾸준히 해주기 위해서다!
git fetch upstream main
- upstream 원격 저장소에 대한 정보들( upstream 저장소에 진행한 여러 커밋 내용들) 중에서 main 브랜치에 있는 것만 가져온다는 뜻
Pr 머지전에 git fetch upstream main 하신다음에
작업 브랜치에서 git rebase upstream/main
git push origin main -f 해주셔야합니다
rebase, 충돌발생시 수정방법, 브렌치명
https://velog.io/@gygy/Gitrebase
위 블로거님이 너무너무 글을 잘 정리해놓으셔서 링크를 남긴다...
진짜 이해 잘 된듯!
브렌치명
충돌 최대한 줄이기
- PR 후 merge를 하기전에 git fetch upstream main
- 작업 브렌치에서 git rebase upstream/main
- git push origin main -f
- 이렇게 해야 서로 싱크를 맞추면서 충돌을 최대한 줄일 수 있다.
- rebase 는 타인의 PR 이 main 에 merge 될때마다 해줘야 충돌이 적어진다.
출처