본문 바로가기

코딩/git, github

깃허브: 브랜치의 개념

반응형

지난 강의 요약

clone: 원격 저장소 (github) 을 내 컴퓨터에 복사해 온다.
add: 내 컴퓨터에서 작업한 파일들을 스테이지에 추가
commit: 스테이지에 올라온 파일들을 가지고 내 컴퓨터에 저장 (세이브와 같다.)
push: 커밋들을 원격 저장소에 업로드
코드 뭉치 버리기: 마지막 커밋으로 되돌아가고 싶을 때 사용

이번 강의 요약
브랜치 (branch): 기능 변경을 하고 싶을 때 생성 및 사용
머지 (merge): 한 브랜치의 내용을 다른 브랜치에 반영
체크아웃 (checkout): 저장소에서 특정 커밋이나 브랜치로 돌아가고 싶을 때 사용

기능 변경하기
이미 돌아가고 있는 프로그램에서 기능을 바꾸고 싶은 일이 생길 수 있습니다. 
그럴 때 어떻게 해야 할까? 
보통 초보 개발자들은 주석을 활용합니다. 
돌아가고 있는 부분을 삭제하면 아까우니까 주석 처리하고 개발합니다. 
(시간이 지나면 코드가 엉망진창으로 짜장짬뽕 믹싱이 되는데 이런 코드를 스파게티 코드라고 하죠.) 
이런 상황을 막기 위해서 브랜치를 사용할 수 있습니다.

시나리오
1. 기존 문서에 새로운 설명을 추가했다.
2. 내용이 맘에 안 들어서 다시 작업을 하고 싶다.
3. 혹시 모르니 기존 내용은 남겨 두고 싶다.
4. 새로 작업을 한 후에 비교해 보고 더 좋은 걸 결과물로 반영하자.

현재 브랜치 변경하기
깃에서는 한 번에 하나의 브랜치에서만 작업이 가능한데 이를 헤드(HEAD) 브랜치라고 부른다.
현재 작업 중인 브랜치 = 헤드 브랜치

브랜치를 변경하기 위해서는 체크아웃(checkout)이란 명령을 사용한다. 사실은 아무 커밋으로나 돌아갈 수도 있지만 일단은 브랜치 변경을 위해 사용한다. 소스트리를 사용하면 정말 쉽게 브랜치 체크아웃을 할 수 있다. 왼쪽 메뉴의 브랜치 이름을 더블 클릭만 하면 된다. 

병합이란?
하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge)라고 한다. 
현재 브랜치는 헤드(HEAD) 브랜치라고 한다
예를 들어 헤드 브랜치가 master 이고 여기서 version2 브랜치를 병합하면 version2의 내용이 master에 반영되게 된다. 

아래는 브랜치를 연습할 수 있는? 시각화해서 이해하기 좋은 사이트이다.
https://learngitbranching.js.org/

상황1: 헤드 브랜치에 변경 사항이 없을 경우
가장 쉬운 상황
이 상황은
1. 합치려는 브랜치가 헤드 브랜치로부터 시작되었다.
2. 그 사이 헤드 브랜치에는 전혀 갱신이 없었다.

주로 혼자 작업을 할 때 발생하는 상황입니다.

상황1: 헤드 브랜치에 변경 사항이 없을 경우


위 그림은 헤드 브랜치(*이 붙어 있는)인 master에서 version2가 시작되고 두 번 커밋한 상태이다. 
여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋으로 이동한다.  
이런 상황을 fast-forward 라고 한다. 

상황2: 가지가 생겨난 경우
두 번째 경우는 상황이 조금 복잡해 졌다. 원인은 몇 가지가 있다.
1. 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
2. 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
3. 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우

세 경우 모두 종종 발생하는 상황

상황2: 가지가 생겨난 경우


여러 브랜치에서 동시에 변경한 파일이 있을 경우 충돌이 발생할 수 있다.
충돌이 생기면 에러 메시지 같은게 나오기 때문에 초보는 큰 충격에 빠지는 데 당연한 일이므로 걱정할 필요는 없다.
혼자 작업하는 경우에는 충돌 해결도 쉬운 편이다.

소스트리와 에디터를 사용하면 어렵지 않게 충돌 해결이 가능하므로 겁먹지 말자.

PULL 및 충돌 해결하기

요약
충돌은 자동병합 실패시 발생
겁먹지 말고 걱정하지 말고 충돌해결하자.
실패하면 다시하면 된다!

안 쓰는 브랜치 삭제하기
현재 브랜치(HEAD) 가 아닌 경우 간단하게 삭제 가능
브랜치를 삭제했을 경우 사라지는 커밋이 있는지 없는지 확인하자!

git pull
서버의 내용이 최신일 경우 pull을 적용한다.
충돌이 날 수 있지만 놀라지 말자.
pull = fetch + merge

충돌의 발생원인
자동병합을 실패했을 경우 발생
주로 두 커밋이 같은 파일을 편집했을 경우 발생

일반적인 해결 방법
에디터를 이용한 해결
병합툴을 이용한 해결
sourceTree를 이용한 해결

에디터를 사용한 해결
"겁 먹지 말고" 충돌난 파일을 꼼꼼히 읽어가며 수동으로 수정한다.

내것 또는 저장소 것 선택하기
혼자서 작업할 경우 일반적으로 두 변경사항 중 하나(주로 내 것)가 최신이고 정답일 가능성이 높다.

충돌을 해결했는데 이상해졌다면
reset을 이용해 되돌리기 시전!

 

출처 : https://www.inflearn.com/course/git-and-github
정호영 강사님의 강의를 듣고 정리했습니다.

 

[지금 무료] Git과 GitHub 시작하기 강의 - 인프런

배우기 어려운 Git의 사용법을 쉬운 Gui 프로그램인 SourceTree를 통해 익혀봅시다., [임베딩 영상] git과 github git 은 형상 관리 시스템(Verson Control System) 의 한 종류입니다. 주로 개발자들이 프로그램

www.inflearn.com

 

 

반응형