Issue
, branch
,merge
Git을 이용한 협업 방식?이 왜 필요한가?
협업 프로젝트를 하는 경우, 여러명의 사람들이 본인들의 원격repo를 추가하려고 할때?! 충돌(conflict)
이 나는 경우가 있다. 이런 경우 해결방법을 알아보자!
개발 프로젝트를 진행할때는 아래와 같은 작업방식이 필요하다.
1. 누가 이 작업 할 것인지 정한다 > Issue
2. 각자 맡은 것을 작업한다 > Branch
3. 각자 작업을 프로젝트에 합칠 수 있게 공유한다 > merge
4. 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다 >(경우에 따라) PR 후 merge
누가 이 작업을 할지 정하는 방법?! issue
를 사용해보자!
issue
는 프로젝트에서 해결해야하는 문제!
"이 기능에 버그가 있으니 issue로 등록하자!"
"이 버튼은 수정해야하니 issue를 등록하자!"
"56번 issue는 제가 처리할게요, issue 등록하자!"
제목과 상세 내용은 협업하는 사람들도 잘 볼수있게 적기
생성된 issue
제목옆에 내가 따로 쓰지않은 #숫자
가 보인다. issue 번호!! 이 issue에 내가 작업한 작업물을 넣으려면 번호를 기억해야한다. (처음시작은 1부터 시작한다.)
관련 내용에 대한 코멘트도 issue에 적어서 넣을수있다.
issue
전체 탭에서 issue번호 확인 가능함커밋메시지작성할때 해당 issue번호를 적어 커밋하기
원격 repo의 해당 이슈 넘버에서 커밋메시지가 확인된다.
branch
: 각자 작업하기
이슈를 사용해서 각자 프젝 작업을 나눴다고 해보자!
따로 작업은 하지만 작업대(main)는 같다!
서로의 작업이 섞이기도 하고, 우연히 같은 작업을 하게되는 경우도 생기면 충돌이 발생하게 된다.
그럼 한 작업대(main
)가 아니고 branch
를 나눠서 작업하고 나중에 합치면?!!
feature/이슈번호_관리쉬운이름
형식으로 만들어줌(관행적인 이름)feature/5_jjigae
에만 반영됩니다. 현재 작업하는 브랜치를 선택하는 것을 체크아웃(checkout)
이라고 합니다. main
: 로컬 repo의 main 브랜치
feature/5_jjigae
: 로컬 repo의 feature/5_jjigae 브랜치
origin/main
: origin(연결시켜준 원격 repo)의 main 브랜치
origin/HEAD
: 현재 작업중인 commit. origin(연결시켜준 원격 repo)의 최신 commit
feature/5_jjigae
에 실습용으로 파일 수정 두번을 해서 커밋해주었다. 위 상태와 같이 가지가 나온 상황. 이 Branch
를 이제 Merge(병합)
해야한다! Merge(병합)
: 브랜치를 다른 브랜치에 합치는 것
1.commit
을 반영시킬 브랜치인 main 으로 체크아웃 합니다. 브랜치 밑 main
을 더블 클릭하세요.
병합을 클릭 -> feature/5_jjigae
의 가장 최신 commit(파란색 이름표가 붙어있는 커밋) 을 선택하고 확인을 누름
모든 경우에 merge되는 commit 메시지는 자동으로 생성하는 옵션을 넣어줌. (하단 빠른 병합(fast-forward)이 가능해도 새 커밋 생성 옵션)
이제 feature/5_jjigae
작업이 끝났으니 브랜치를 삭제하자! 브랜치는 main으로 클릭한 후에 5_jjigae
를 삭제
🛑 하나의 파일을 여러 브랜치에서 수정하고 하나의 branch에 merge 하려고 할 때 merge conflict(병합 충돌)
가 발생
git에서는 친절하게 충돌이 나는 부분을 알려준다:) 어떤 수정 내용을 반영할지 아래와 같이 메시지를 줌
<<<<<<< HEAD
{현재 브랜치의 다른 파일 내용}
=======
{충돌나는 브랜치명 또는 commit에서의 다른 파일 내용}
>>>>>>> 충돌나는 브랜치명 또는 commmit 아이디
merge confilct
를 고치려면, 내가 원하는 대로 파일을 수정하고(어떤 내용을 반영할지 결정) 에러 메세지 부분을 지우면 된다. 그러나, 새로운 내용 수정은 하지말고 있는 내용에서 수정할 내용을 선택하자!
충돌 수정한 후 , merge commit
!
tracking
한다는 것은 로컬 repo
와 원격 repo
의 특정 브랜치를 연결해주는 것