Git 브랜치(Branch) 관리

정보/뉴스

Git 브랜치(Branch) 관리

담운 0 1,338 2019.06.08 12:48

안녕하세요. 이번 시간에는 대망의 Git 브랜치(Branch)에 대해 알아보겠습니다. 사실 앞부분은 기본 중에 기본이고요. 지금부터 할 내용이 주요 부분입니다. 다음 두 상황을 가정해보죠.

1) 혼자 작업할 때: 현재 홈페이지를 만들고 있다가 실시간 알림 기능을 추가하고 싶어졌습니다. 하지만 한 번에 만들 수 있을거라는 확신이 없어서 무수히 많은 commit을 해야 완성할 수 있을 것 같습니다. 그리고 실패 시에는 commit을 이전으로 되돌리고 싶은데요. 그렇다고 현재 master 브랜치의 log가 지저분해지는 것은 원하지 않습니다.

2) 협업할 때: A와 B 두 명이서 협업을 하는 상황입니다. Github에 코드를 올려놓고 각자 다운로드받아 코딩을 하고 있습니다. 두 명이 각자 다른 파일을 작업하면 별 걱정이 없겠지만, 하나의 파일을 둘이 동시에 작업하고 있습니다. 문제는 이렇게 여러 명이 같은 파일을 작업해서 commit한 후, 동시에 Github에 push를 하면 충돌이 생긴다는 겁니다. 왜냐하면 A가 한 commit은 B에겐 없고, B가 한 commit은 A에게 없어서 Github 서버는 어떤 것이 올바른 commit인지 알 수 없습니다.

위와 같은 상황에서 우리는 branch 기능을 사용합니다. 기본적으로 생성되는 master 브랜치 말고 다른 브랜치를 만들어 사용하는 거죠. 위의 예시가 다른 브랜치를 사용하는 이유고, 또 하나의 이유는 실제 환경에선 master 브랜치에 배포 준비가 된 commit들만 남기는 경우가 많기 때문입니다.

제 홈페이지를 예로 들자면, 제가 Github의 origin에 master 브랜치의 commit을 push하는 순간 자동으로 제 홈페이지가 업데이트됩니다. 그렇게 설정해 놓았거든요. 만약 실수로 에러가 있는 master 브랜치의 commit을 push하면 제 홈페이지에 에러가 발생하는 겁니다. 그런 상황을 막기 위해, 아예 다른 브랜치를 만들어 작업하면 실수로 에러가 있는 브랜치를 push하더라도 master과는 별개이기 때문에 안심할 수 있습니다.

현재 log를 시간순으로 나열하면 다음과 같습니다. 두 번 commit하고 지난 시간에 revert를 했기 때문에 log가 세 개가 쌓였습니다.


최신 commit인 Revert "Second commit"에 master가 위치해있습니다. master는 master 브랜치의 가장 최근 commit을 가리키고요. HEAD(노란 원)는 현재 내가 작업중인 commit의 위치를 가리킵니다. First commit에는 remotes/origin/master가 있는데 예전에 원격 저장소로 push했음을 표시하고 있습니다.

위와 같이 log를 시각적으로 보려면 프로젝트 폴더에서 Git GUI를 실행하면 됩니다. 실행 방법은 지난 시간에 설명했습니다. 컴컴한 명령 프롬프트보다는 훨씬 낫죠?

git branch

명령어를 통해 새로운 branch를 만들어보죠. git branch [브랜치명]입니다.

잘 생성되었나 보려면 그냥 git branch라고 쳐보세요. 앞에 * 표시가 있는 게 현재 HEAD가 있는 branch입니다.

bZwN4c9nSQ3xpBxmk6Qu

git checkout

새로 만든 feature 브랜치에서 작업하려면 feature 브랜치로 HEAD를 옮겨야 합니다. 이때 사용하는 명령어가 git checkout [브랜치명]입니다.

git checkout은 예전에 봤죠? 파일에 사용했을 때는 Modified에서 Unmodifed로 상태를 변경하는 명령어였습니다. 브랜치에 사용하는 경우는 브랜치간 전환을 합니다.

ykBgSevyRBKhKiLsEU1X

git.html을 다음과 같이 바꿉니다.

<!DOCTYPE html>
<html>
<head>
  <title>깃 연습</title>
  <link rel="stylesheet" href="./git.css" />
</head>
<body>
  <h1>깃 브랜치</h1>
  <p><b>깃 브랜치</b>의 사용 방법에 대해 알아봅시다</p>
</body>
</html>

그리고 Feature commit이란 메세지로 commit해줍니다.

InKIWGBKTti5ZN5xzs4m

현재 구조는 다음과 같습니다. 새로운 브랜치 feature가 master보다 한 단계 앞서 있습니다. 브랜치별로는 commit이 따로 적용됩니다. 즉 master와 feature은 Revert "Second commit"까지는 공유하지만 그 다음부터는 별개의 프로젝트라고 보셔도 됩니다.


이제 여러 명의 사람들이 작업할 때에는 각자 브랜치를 만들어 따로 작업하면 됩니다. 한 사람의 작업이 다른 사람에게 영향을 미치지 않습니다.

각자 작업을 마치면 최종적으로 하나로 합쳐야겠죠? 이제 master 브랜치에서 하나로 모아줍시다. feature 브랜치에서 작업하다가 다시 git checkout [브랜치명] 명령어를 사용하여 master 브랜치로 돌아갑니다.

YoJwzk2WQ9u277EGCpCw

분량 관계로 다음 시간에 이어하겠습니다. 두 개의 브랜치를

Comments

번호 제목 글쓴이 날짜 조회
72 과연 양방향매매로 수익낼 수가 있는가… 댓글+1 담운 2020.05.14 2066
71 [해외선물] 실시간 시세신청 안내-지… 담운 2020.05.11 639
70 해외선물 실시간 시세 무료로 볼 수 … 담운 2020.05.10 1083
69 DB금융투자, 수수료 혜택 등 해외선… 담운 2020.04.02 567
68 위험 고지 담운 2020.03.31 569
67 리스크 고지 담운 2020.03.11 551
66 해외선물 증거금 담운 2019.10.20 831
65 CME E-micro 담운 2019.10.20 824
64 파생상품 양도소득세 확정신고 안내 담운 2019.09.25 857
63 주식, 암호화폐, 해외주식 세금 비교 담운 2019.09.13 881
62 해외선물옵션 API 시세 유료화 정책… 담운 2019.08.28 1863
61 Github에 ssh키 생성하고 등록… 담운 2019.06.08 1195
60 github-white-logo-70… 담운 2019.06.08 1229
59 ssh-key 생성 및 github,… 담운 2019.06.08 1713
58 Git 서버 - SSH 공개키 만들기 담운 2019.06.08 1351
57 Nodejs로 구현한 서비스를 Caf… 담운 2019.06.08 2998
56 GitHub SSH 키 생성 및 등록… 담운 2019.06.08 1527
55 기타 Git 명령어(cherry-pi… 담운 2019.06.08 1017
54 Merge와 Rebase 담운 2019.06.08 1103
열람중 Git 브랜치(Branch) 관리 담운 2019.06.08 1339
52 Git commit 수정하기, dif… 담운 2019.06.08 1167
51 Github 사용하기, remote,… 담운 2019.06.08 1641
50 Git 저장소 생성(init), 최초… 담운 2019.06.08 1237
49 Git 설치와 사용법(Git Bash… 담운 2019.06.08 1297
48 node.js git 사용법 담운 2019.06.08 1454
47 Windows에서 git 및 node… 담운 2019.06.08 1387
46 Nodejs로 구현한 서비스를 Caf… 담운 2019.06.08 1249
45 Git 활용 (기본적인 사용법) 담운 2019.06.08 1258
44 cafe24 nodejs git 저장… 담운 2019.06.08 1865
43 카페24 node.js 접속준비 담운 2019.06.08 1804
42 cafe24 node.js git 사… 담운 2019.06.08 3433
41 GitHub - 소스트리(Source… 담운 2019.06.07 1824
40 Sourcetree 설치 가이드 담운 2019.06.07 1102
39 [Git] 소스트리 (SourceTr… 담운 2019.06.07 1395
38 GitLab 업무환경 구성 가이드 담운 2019.06.07 1338
37 Git :: 소스트리(SourceTr… 담운 2019.06.07 1261
36 cafe24 에서 nodejs hos… 담운 2019.06.06 1757
35 카페24 node.js 접속준비 담운 2019.06.06 2711
34 카페24에서 Node.js 서버로 A… 담운 2019.06.06 1466
33 ssh 키 인증 방식으로 로그인하기 담운 2019.06.06 1436