본문 바로가기

Study/Git

[Git] 4강. Git-GitHub 사용하기 (브랜치Branch / 머지Merge / 포크fork)

11. 평행세계 나누기 : 브랜치(Branch)

- 똑같은 코드를 동시에 작업할 가능성이 있기에 한줄에서 작업하면 충돌이 날 수 있음

- 따라서 n줄(다중으)로 쌓은 다음에 나중에 합치고, 합칠 때 충돌이 나더라도 명시적으로 충돌을 해결할 수 있음

-> 이때 나누어진 가지들을 브랜치Branch라고 함

-> 이때까지 썼던 master 역시 기본으로 설정되는 브랜치임

 

1) CLI 방식 - 명령어 소개

   a. 브랜치 만들기
      브랜치를 현재 시점에서 만들어라 - cld 명령어 : git branch 브랜치명 

   b. 만든 브랜치로 이동하기
      지정브랜치로 이동해라 - cld 명령어 : git checkout 브랜치명

 

2) GUI 방식 - 버튼 클릭으로

(1) KittyGit 로컬저장소에서 메인페이지를 수정할 브랜치 생성

   - 브랜치명에 붙이는 feat/ 는 기능의 약자를 기재한 것으로, 나중에 폴더처럼 이 이름만 붙은 것만 뽑아서 볼 수 있어서 편리

(2) KittyGit 에서 html 적당히 수정후, 소스트리 새로고침하여 커밋되지 않은 변경사항 확인 -> 커밋+push처리까지 해주기! (커밋화면 하단 체크박스 표시하면 push도 한번에 가능)

(3) KittyGit_oct 에서 pull 받아온 후, branch브랜치 (명명: feat/comment) 새로 생성

-> 이 브랜치는 이전의 커밋내용까지만 존재하므로 위 (2)에서 수정한 내용이 담겨있지 않다

-> VIsual Studio에서 새로운 내용 추가

-> 소스코드 새로고침하면 분기가 나뉘어져 갈라진 커밋내용을 확인할 수 있음 -> 커밋/push 까지

(4) 브랜치Branch 확인하기

-> 브랜치 변경(이동)하고 싶을 때 좌측의 브랜치 리스트 중 더블클릭으로

-> 브랜치를 변경하면 그 브랜치의 커밋 내용으로 보여짐

 

 

12. 두버전 합치기: 머지(merge)

[ 순서 ]

1. 먼저 base가 될 master 브랜치로 이동

2. compare 브랜치와 합치기 (compare: 기준말고 뻗은 가지)

 

1) CLI 방식 - 명령어로

1. 지정브랜치로 이동해라 - cld 명령어 : git checkout base브랜치명

2. 브랜치 합치기 명령어 : git merge compare브랜치명

 

2) 소스코드 GUI로 - 버튼으로

1. 번호 순서대로 하면 됨

2. 위의 내용 한 후, push까지 완료하기

 

 

13. 합치다가 충돌이 났을 때 : 컨플릭트(conflict)

상황1. 잘 병합될 때

1) [ KittyGit_oct ] REDA.me 파일에 변경사항을 넣고 commit + push ( in Visual Studio)

2) GUI에서 master 브런치를 선택하고(!!) 남은 분기들을 모두 병합(merge)해줌

-> 말끔하게 모두가 연결된 Marge Branch 가 생성됨

 

상황2. 충돌(conflict) 발생 시

1) [ KittyGit ] READ.me 파일을 변경하고 커밋 시도

2) 충돌이 발생했을 때, 가장 간단한 방법은 충돌이 발생한 부분을 수정해주면 됨

-> 다시 Visual Studio Code 의 브랜치 메뉴에서 꺽쇠로 중복된 부분이 표시된 걸 볼 수 있음

-> 꺽쇠를 비롯하여 불필요한 부분을 지우고 원하는 코드를 작성

3) 수정한 후 다시 커밋 시도 하고 push도 실행하면 모든 부분이 병합된 브런치를 얻을 수 있음

 

 

14. 저장소 통째로 복제하기 : 포크(fork)

 

# push권한이 없는 B가 A팀의 오픈소스에 기여하는 방법
   1. A팀의 Origin저장소를 통째로 B가 복제함(포크fork)
   2. 복제한 저장소에 B가 자유롭게 커밋, 푸시함
   3. B가 A팀에게 Origin저장소에 머지해달라고 요청 가능

 

1) A팀의 오픈소스를 가져올 B 계정 접속(새 계정)

2) 가져오고자 하는 A팀의 오픈소스에 접속+포크fork 클릭

3) 포크 진행 중이 지나면 B계정의 이름으로 내용을 가져옴 (위 아래의 프로젝트 왼쪽의 닉네임이 다른다는 걸 비교)

--> 포크해서 가져온 오픈소스는 타인이 다시 포크할 수 없는듯(버튼이 활성되지 않음)

4) B계정에서 가져온 오픈소스 다운로드 -> HTTPS 주소를 가지고 -> 클론Clone 생성

5) 클론 생성 후 내용 수정 > Add > commit

6) but, 이 경우 이 프로젝트는 원본이 아니므로 원본에 영향을 끼치지 않음

-> 즉, 원본에 영향을 미치기 위해서 원본의 주인에게 [ Pull requests ] 를 요청함

-> Pull requests 는 B가 수정한 내용을 원본에 적용해달라고 A팀에 요청하는 것임!

7) 위 리퀘스트를 A팀 관리자가 승락하면 원본에도 정보가 저장됨