티스토리 뷰
conflict(충돌)은 같은 파일을 다른 팀원들이 같이 수정했을 때, Git이 어떤 것을 원격 repo에 반영할거야? 하고 물어보는 것이다. 이런 '충돌'을 해결하기 위해서는 아래와 같은 작업방식이 필요하다.
✅협업 프로젝트 3단계
- 누가 이 작업을 할 것인지 정한다. (이슈할당) - Issue
- 각자 맡은 것을 작업한다. - Branch
- 각자 작업을 프로젝트에 합칠 수 있게 공유한다. -merge
- (경우에 따라) 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다. - PR 후 merge
프로젝트에서 issue는 프로젝트에서 해결해야하는 문제로 아래와 같은 것이 있다.
- 버그(프로그램이 원하는 대로 작동하지 않는 것)를 신고(bug report)
- 기능 추가 등의 프로젝트 개선 제안(enhancement) -> e.g.) Pull Request(제안사항)
- 이슈(issue)란 위 문제들을 해결하기 위한 작업단위
프로젝트에서 이슈(issue)란 작업단위이자 해결해야하는 문제이다.
issue는 내가 할 작업, 기능 추가, 버그 리포트 등 여러방식으로 사용할 수 있음
✔ github에 첫 issue 생성해보기
- github홈페이지에 가서 내 원격 repo에 issue로 들어갑니다.
- create 버튼을 통해 issue를 작성해줍니다.
아래의 내용에 체크된 #1 은 issue들을 식별해주는 번호입니다. (커밋 메세지에 이슈 번호를 포함해서 알려줄 수 있다.)
Assignees 는 작성자를 뜻하고 Labels는 해당 issue에 대한 정보를 담은 태그입니다.
🐱👤 Label의 태그 명들은 선택창에서 상세 내용을 확인할 수 있습니다. 내가 하는 작업과 관련된 태그를 골라주시면 됩니다. 예시로 enhancement 태그는 new feature or request 라는 상세 내용을 포함합니다.
-> 만들어진 이슈의 오른쪽 하단에 있는 close issue 버튼을 누르면 이슈가 닫힙니다.
즉, 더 이상 필요하지 않거나 해결된 이슈일 경우 close issue버튼을 눌러주면 됩니다. (필요하게 되면 다시 open해줄 수 있음 - reopen issue버튼 클릭)
✔ issue와 관련된 commit 만들기
1. issue내용에 관련된 파일을 수정하고 sourcetree를 통해 commit할 때, commit message칸에 커밋 내용과 함께 이슈 번호를 같이 적어준다.
2. 이 다음 github홈페이지 내 원격 repo의 해당 issue(#1)를 클릭해보면 아래와 같이 자동으로 반영된 것을 확인할 수 있다.
✔ 각자 공간에서 작업하기 - Branch
- issue와 브랜치 만들기(내가 어떤 작업 하는지 이슈 먼저 등록해야 함)
- 이슈를 등록했다면 sourcetree로 새 브랜치를 만들어줍니다
새 브랜치는 가장 상단의 브랜치에서 우클릭 후, 브랜치 클릭 (위치는 꼭 가장 상단의 브랜치가 아니여도 됩니다만 대충 내가 이 브랜치로부터 갈라져 나올거야! 라는 의미입니다. 새로 생긴 브랜치의 시작점은 기본적으로 갈라져나온 브랜치(예시에서 main)의 최신 commit 부터 입니다.)
- 새 브랜치 명은 팀내규칙을 따르지만 통상적으로 새 기능을 만들 때는 feature/이슈번호_기능명 으로 아래와 같이 작명해준다.
- 왼쪽의 브랜치 구조를 보면 2_jjigae라는 새 브랜치가 생성된 것을 확인할 수 있다. 그리고 현재는 2_jjigae에 체크아웃되어있다. main브랜치로 넘어가고 싶다면 왼쪽 브랜치에서 선택하여 눌러주면 된다.
*현재 작업할 브랜치를 선택하는 것을 체크아웃이라고 한다.
✔ 현재 내가 체크아웃되어 있는 브랜치는 왼쪽에 빈 동그라미 표시로 확인할 수 있다.
❗ 브랜치를 삭제하는 방법
테스트해보기 위해서 main브랜치로 체크아웃 해준 뒤 새 브랜치(delete_test)를 만들어줍니다.
*원래 작업하던 feature/2_jjigae 에서 main브랜치로 체크아웃해주세요
-> 새 브랜치를 만들면 자동으로 해당 브랜치로 체크아웃됩니다. 그러면 저는 이제 delete_test에 체크아웃된 상태겠네요.
🐱👤브랜치 삭제 -> 해당 브랜치의 커밋내역이 모두 날아가게 됩니다.
*커밋 내역이 날아간다는 것은 파일이 수정된 내역이 전부 없어진다는 것이다.
❗주의) 어떤 브랜치를 삭제하기 위해서는 다른 브랜치로 일단 체크아웃한 상태에서 삭제가 가능하다.
어차피 삭제될 브랜치이므로 jeon파일의 내용을 변경한 뒤 커밋해줍니다.
위와 같이 main 브랜치로 체크아웃한 뒤에 delete_test 브랜치를 우클릭 -> delete_test 삭제 를 눌러줍니다.
강제 삭제에 체크해준 뒤 삭제하면 히스토리에서도 완전히 사라지게 된다.
✔ 작업 내용 합치기 - Merge(병합)
🐱👤merge에 들어가기 이전에...
커밋하고 작업하는 방법들을 플로우라고 부르는데 대표적으로 github-flow, gitlab-flow, git-flow가 있다.
웹의 경우는 github-flow를 많이 쓴다. 자세한 내용은 아래 링크를 통해 확인 가능
관련 링크: https://ujuc.github.io/2015/12/16/git-flow-github-flow-gitlab-flow/ (3가지 flow)
https://pepega.tistory.com/35 (깃헙 플로우)
Merge가 무엇인가요?
- Merge(병합)는 브랜치를 다른 브랜치에 합치는 것이다. 즉, 특정 브랜치의 commit들을 다른 브랜치의 commit 내역에 모두 반영하는 것이다. 기본적인 설정은 해당 브랜치의 모든 commit을 모두 다 반영한다고 생각하면 된다.
sourcetree로 병합하기
- ✔ 병합하려는 브랜치로 이동합니다. (feature/2_jjigae에 체크아웃되어있고 main에 병합하고 싶다면 main으로 체크아웃해야겠죠?)
- 상단에 병합(merge)를 눌러줍니다.
- 아래와 같은 화면에서 합칠 브랜치를 체크해줍니다. feature/2_jjjigae 가 표시된 부분을 선택하면 해당 브랜치의 이전 commit들이 전부 포함됩니다.
- 하단의 옵션에서 3개를 체크해줍니다.
머지가 완성된 모습입니다.
🐱👤사진을 보면 main이 두 개 존재하는데 main 브랜치가 두 개인 것이 아니라
origin/main의 경우 원격 repo의 main을 나타냅니다.
+ main 옆에 3 표시는 원격 repo와 내 로컬 repo commit이 얼마나 차이나는 지 알려주는 것이다.
여담) 머지 성공 시 해당 내역을 확인할 수 있는데 Merge branch 'feature/2_jjjigae' (into main) 라는 브랜치명을 확인할 수 있다.
실습 예제에서는 into main이 보이는데 내 sourcetree에서는 생략된 채로 됐길래 오류인 줄 알았다.
->아무래도 이미 merge를 할 때는 머지할 곳으로 체크아웃을 하기 때문에 into 브랜치가 생략되나 보다.
마지막으로 브랜치 병합을 성공했으면 만들어놨던 feature/브랜치명 에 해당하는 브랜치들을 main 브랜치로 체크아웃한 뒤 삭제해준다.
❗Merge(병합)시 주의사항
🐱👤작업이 완료된 브랜치는 삭제해준다.
why? 만약에 이미 작업이 완료된 브랜치에 실수로 체크아웃한 경우 작업 내역이 복잡해지기 때문이다.
브랜치를 임시적인 작업 공간으로 생각하면 된다.
🐱👤각각의 브랜치마다 꼭 다른 파일을 수정해야 한다. 같은 파일을 수정할 경우, merge conflict가 발생한다.
'프로그래밍 > Git, Github' 카테고리의 다른 글
[Git] .gitignore가 적용되지 않을 때 with sourcetree (0) | 2022.05.22 |
---|---|
[Git] sourcetree 충돌 해결하기(merge conflict) (0) | 2022.05.09 |
[Git] sourcetree에서 저장소 접근 시 인증 에러 해결방법 (0) | 2022.05.07 |
[Git] sourcetree로 원격 repo & 로컬 repo 사용하기(혼자 git 프로젝트 관리하기) (0) | 2022.05.06 |
[Git] git 세팅하기(with sourcetree) (0) | 2022.05.06 |
- Total
- Today
- Yesterday
- 프리렌더링확인법
- reactAPI
- aspect-ratio
- fs모듈 넥스트
- 타입스크립트 DT
- 항해99프론트후기
- float 레이아웃
- D 플래그
- 원티드 프리온보딩 FE 챌린지
- tilde caret
- 타입스크립트 장점
- Prittier
- nvm경로 오류
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 형제 요소 선택자
- && 셸 명령어
- getServerSideProps
- grid flex
- 항해99추천비추천
- ~ ^
- text input pattern
- 원티드 FE 프리온보딩 챌린지
- 항해99프론트
- nvm 설치순서
- 프리온보딩 프론트엔드 챌린지 3월
- 틸드와 캐럿
- is()
- getStaticPaths
- 부트캠프항해
- 원티드 3월 프론트엔드 챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |