CINXE.COM

Git - 브랜치란 무엇인가

<!DOCTYPE html> <html lang="ko"> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - 브랜치란 무엇인가</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> </head> <body id="documentation"> <div class="inner"> <header> <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs">Reference</a> </li> <li> <a href="/book" class="active">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> <hr class="sidebar"> <p> This book is available in <a href="/book/en/v2/Git-Branching-Branches-in-a-Nutshell">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git%e2%80%99d%c9%99-Branch-Nutshell%e2%80%99d%c9%99-Branch%e2%80%99lar">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%9d%d0%b0%d0%ba%d1%80%d0%b0%d1%82%d0%ba%d0%be-%d0%b7%d0%b0-%d1%80%d0%b0%d0%b7%d0%ba%d0%bb%d0%be%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f%d1%82%d0%b0">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Branching-Branches-auf-einen-Blick">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Ramificaciones-en-Git-%c2%bfQu%c3%a9-es-una-rama?">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Les-branches-avec-Git-Les-branches-en-bref">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%a8%e3%81%af">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Branchen-in-Git-Branches-in-vogelvlucht">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%92%d0%b5%d1%82%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-Git-%d0%9e-%d0%b2%d0%b5%d1%82%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b8-%d0%b2-%d0%b4%d0%b2%d1%83%d1%85-%d1%81%d0%bb%d0%be%d0%b2%d0%b0%d1%85">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Veje-Git-Veje-na-kratko">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Pag-branch-ng-Git-Mga-Branch-sa-Maikling-Salita">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%93%d1%96%d0%bb%d0%ba%d0%b8-%d1%83-%d0%ba%d1%96%d0%bb%d1%8c%d0%ba%d0%be%d1%85-%d1%81%d0%bb%d0%be%d0%b2%d0%b0%d1%85">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%ae%80%e4%bb%8b">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-V%c4%9btve-v-kostce">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%be%d0%b1%d1%98%d0%b0%d1%81%d0%bd%d0%b5%d1%82%d0%be">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Ga%c5%82%c4%99zie-Gita-Czym-jest-ga%c5%82%c4%85%c5%ba">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b0%d1%9a%d0%b5-%d1%83-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d1%83-%d0%93%d0%b8%d1%82-%d0%a3%d0%ba%d1%80%d0%b0%d1%82%d0%ba%d0%be-%d0%be-%d0%b3%d1%80%d0%b0%d0%bd%d0%b0%d1%9a%d1%83">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-%d0%b4%d0%b0-%d1%82%d0%b0%d1%80%d0%bc%d0%be%d2%9b%d0%bb%d0%b0%d0%bd%d0%b8%d1%88-%d0%a2%d0%b0%d1%80%d0%bc%d0%be%d2%9b%d0%bb%d0%b0%d0%bd%d0%b8%d1%88-%d2%b3%d0%b0%d2%9b%d0%b8%d0%b4%d0%b0-%d0%b8%d0%ba%d0%ba%d0%b8-%d0%be%d2%93%d0%b8%d0%b7-%d1%81%d1%9e%d0%b7">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/%e4%bd%bf%e7%94%a8-Git-%e5%88%86%e6%94%af-%e7%b0%a1%e8%bf%b0%e5%88%86%e6%94%af">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Branching-Branches-in-a-Nutshell">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/%d8%b4%d8%a7%d8%ae%d9%87%e2%80%8c%d8%b3%d8%a7%d8%b2%db%8c-%d8%af%d8%b1-%da%af%db%8c%d8%aa-%d8%b4%d8%a7%d8%ae%d9%87%e2%80%8c%d9%87%d8%a7-%d8%af%d8%b1-%db%8c%da%a9-%da%a9%d9%84%d9%85%d9%87" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Branching-Branches-in-a-Nutshell">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Branching-Branches-in-a-Nutshell">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Branching-Branches-in-a-Nutshell">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Branches-no-Git-Branches-em-poucas-palavras">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Ramifica%c3%a7%c3%a3o-do-Git-Branches-in-a-Nutshell">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-f%c3%b6rgreningar-Grenar-i-ett-n%c3%b6tskal">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Git-Dallar%c4%b1-Dallar">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit/progit2-ko">hosted on GitHub.</a></br> Patches, suggestions and comments are welcome. </p> </nav> </aside> <div id="content"> <div id="book-chapters"> <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a> <div class='dropdown-panel' id='chapters-dropdown'> <div class='three-column'> <div class="column-left"> <ol class='book-toc'> <li class='chapter'> <h2>1. <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac%eb%9e%80%3F">시작하기</a></h2> <ol> <li> 1.1 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac%eb%9e%80%3F">버전 관리란?</a> </li> <li> 1.2 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%ec%a7%a7%ea%b2%8c-%eb%b3%b4%eb%8a%94-Git%ec%9d%98-%ec%97%ad%ec%82%ac">짧게 보는 Git의 역사</a> </li> <li> 1.3 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-Git-%ea%b8%b0%ec%b4%88">Git 기초</a> </li> <li> 1.4 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-CLI">CLI</a> </li> <li> 1.5 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-Git-%ec%84%a4%ec%b9%98">Git 설치</a> </li> <li> 1.6 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-Git-%ec%b5%9c%ec%b4%88-%ec%84%a4%ec%a0%95">Git 최초 설정</a> </li> <li> 1.7 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%eb%8f%84%ec%9b%80%eb%a7%90-%eb%b3%b4%ea%b8%b0">도움말 보기</a> </li> <li> 1.8 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-Git-%ec%a0%80%ec%9e%a5%ec%86%8c-%eb%a7%8c%eb%93%a4%ea%b8%b0">Git의 기초</a></h2> <ol> <li> 2.1 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-Git-%ec%a0%80%ec%9e%a5%ec%86%8c-%eb%a7%8c%eb%93%a4%ea%b8%b0">Git 저장소 만들기</a> </li> <li> 2.2 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ec%88%98%ec%a0%95%ed%95%98%ea%b3%a0-%ec%a0%80%ec%9e%a5%ec%86%8c%ec%97%90-%ec%a0%80%ec%9e%a5%ed%95%98%ea%b8%b0">수정하고 저장소에 저장하기</a> </li> <li> 2.3 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ec%bb%a4%eb%b0%8b-%ed%9e%88%ec%8a%a4%ed%86%a0%eb%a6%ac-%ec%a1%b0%ed%9a%8c%ed%95%98%ea%b8%b0">커밋 히스토리 조회하기</a> </li> <li> 2.4 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%eb%90%98%eb%8f%8c%eb%a6%ac%ea%b8%b0">되돌리기</a> </li> <li> 2.5 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%ec%a0%80%ec%9e%a5%ec%86%8c">리모트 저장소</a> </li> <li> 2.6 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ed%83%9c%ea%b7%b8">태그</a> </li> <li> 2.7 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-Git-Alias">Git Alias</a> </li> <li> 2.8 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80">Git 브랜치</a></h2> <ol> <li> 3.1 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80" class="active">브랜치란 무엇인가</a> </li> <li> 3.2 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%ec%99%80-Merge-%ec%9d%98-%ea%b8%b0%ec%b4%88">브랜치와 Merge 의 기초</a> </li> <li> 3.3 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98-%ea%b4%80%eb%a6%ac">브랜치 관리</a> </li> <li> 3.4 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98-%ec%9b%8c%ed%81%ac%ed%94%8c%eb%a1%9c">브랜치 워크플로</a> </li> <li> 3.5 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%eb%b8%8c%eb%9e%9c%ec%b9%98">리모트 브랜치</a> </li> <li> 3.6 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-Rebase-%ed%95%98%ea%b8%b0">Rebase 하기</a> </li> <li> 3.7 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">Git 서버</a></h2> <ol> <li> 4.1 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">프로토콜</a> </li> <li> 4.2 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%84%9c%eb%b2%84%ec%97%90-Git-%ec%84%a4%ec%b9%98%ed%95%98%ea%b8%b0">서버에 Git 설치하기</a> </li> <li> 4.3 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-SSH-%ea%b3%b5%ea%b0%9c%ed%82%a4-%eb%a7%8c%eb%93%a4%ea%b8%b0">SSH 공개키 만들기</a> </li> <li> 4.4 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%84%9c%eb%b2%84-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">서버 설정하기</a> </li> <li> 4.5 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-Git-%eb%8d%b0%eb%aa%ac">Git 데몬</a> </li> <li> 4.6 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%8a%a4%eb%a7%88%ed%8a%b8-HTTP">스마트 HTTP</a> </li> <li> 4.7 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%eb%98%90-%eb%8b%a4%eb%a5%b8-%ec%84%a0%ed%83%9d%ec%a7%80,-%ed%98%b8%ec%8a%a4%ed%8c%85">또 다른 선택지, 호스팅</a> </li> <li> 4.10 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-%ec%9b%8c%ed%81%ac%ed%94%8c%eb%a1%9c">분산 환경에서의 Git</a></h2> <ol> <li> 5.1 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-%ec%9b%8c%ed%81%ac%ed%94%8c%eb%a1%9c">분산 환경에서의 워크플로</a> </li> <li> 5.2 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8%ec%97%90-%ea%b8%b0%ec%97%ac%ed%95%98%ea%b8%b0">프로젝트에 기여하기</a> </li> <li> 5.3 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">프로젝트 관리하기</a> </li> <li> 5.4 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/ko/v2/GitHub-%ea%b3%84%ec%a0%95-%eb%a7%8c%eb%93%a4%ea%b3%a0-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/ko/v2/GitHub-%ea%b3%84%ec%a0%95-%eb%a7%8c%eb%93%a4%ea%b3%a0-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">계정 만들고 설정하기</a> </li> <li> 6.2 <a href="/book/ko/v2/GitHub-GitHub-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8%ec%97%90-%ea%b8%b0%ec%97%ac%ed%95%98%ea%b8%b0">GitHub 프로젝트에 기여하기</a> </li> <li> 6.3 <a href="/book/ko/v2/GitHub-GitHub-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">GitHub 프로젝트 관리하기</a> </li> <li> 6.4 <a href="/book/ko/v2/GitHub-Organization-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">Organization 관리하기</a> </li> <li> 6.5 <a href="/book/ko/v2/GitHub-GitHub-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8c%85">GitHub 스크립팅</a> </li> <li> 6.6 <a href="/book/ko/v2/GitHub-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%a6%ac%eb%b9%84%ec%a0%84-%ec%a1%b0%ed%9a%8c%ed%95%98%ea%b8%b0">Git 도구</a></h2> <ol> <li> 7.1 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%a6%ac%eb%b9%84%ec%a0%84-%ec%a1%b0%ed%9a%8c%ed%95%98%ea%b8%b0">리비전 조회하기</a> </li> <li> 7.2 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%8c%80%ed%99%94%ed%98%95-%eb%aa%85%eb%a0%b9">대화형 명령</a> </li> <li> 7.3 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Stashing%ea%b3%bc-Cleaning">Stashing과 Cleaning</a> </li> <li> 7.4 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%82%b4-%ec%9e%91%ec%97%85%ec%97%90-%ec%84%9c%eb%aa%85%ed%95%98%ea%b8%b0">내 작업에 서명하기</a> </li> <li> 7.5 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ea%b2%80%ec%83%89">검색</a> </li> <li> 7.6 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ed%9e%88%ec%8a%a4%ed%86%a0%eb%a6%ac-%eb%8b%a8%ec%9e%a5%ed%95%98%ea%b8%b0">히스토리 단장하기</a> </li> <li> 7.7 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Reset-%eb%aa%85%ed%99%95%ed%9e%88-%ec%95%8c%ea%b3%a0-%ea%b0%80%ea%b8%b0">Reset 명확히 알고 가기</a> </li> <li> 7.8 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ea%b3%a0%ea%b8%89-Merge">고급 Merge</a> </li> <li> 7.9 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Git%ec%9c%bc%eb%a1%9c-%eb%b2%84%ea%b7%b8-%ec%b0%be%ea%b8%b0">Git으로 버그 찾기</a> </li> <li> 7.11 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ec%84%9c%eb%b8%8c%eb%aa%a8%eb%93%88">서브모듈</a> </li> <li> 7.12 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Bundle">Bundle</a> </li> <li> 7.13 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Replace">Replace</a> </li> <li> 7.14 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Credential-%ec%a0%80%ec%9e%a5%ec%86%8c">Credential 저장소</a> </li> <li> 7.15 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">Git맞춤</a></h2> <ol> <li> 8.1 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">Git 설정하기</a> </li> <li> 8.2 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-Attributes">Git Attributes</a> </li> <li> 8.3 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-Hooks">Git Hooks</a> </li> <li> 8.4 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-%ec%a0%95%ec%b1%85-%ea%b5%ac%ed%98%84%ed%95%98%ea%b8%b0">정책 구현하기</a> </li> <li> 8.5 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-Git:-%eb%b2%94%ec%9a%a9-Client">Git과 여타 버전 관리 시스템</a></h2> <ol> <li> 9.1 <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-Git:-%eb%b2%94%ec%9a%a9-Client">Git: 범용 Client</a> </li> <li> 9.2 <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-Git%ec%9c%bc%eb%a1%9c-%ec%98%ae%ea%b8%b0%ea%b8%b0">Git으로 옮기기</a> </li> <li> 9.3 <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Plumbing-%eb%aa%85%eb%a0%b9%ea%b3%bc-Porcelain-%eb%aa%85%eb%a0%b9">Git의 내부</a></h2> <ol> <li> 10.1 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Plumbing-%eb%aa%85%eb%a0%b9%ea%b3%bc-Porcelain-%eb%aa%85%eb%a0%b9">Plumbing 명령과 Porcelain 명령</a> </li> <li> 10.2 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Git-%ea%b0%9c%ec%b2%b4">Git 개체</a> </li> <li> 10.3 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Git-Refs">Git Refs</a> </li> <li> 10.4 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Packfile">Packfile</a> </li> <li> 10.5 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Refspec">Refspec</a> </li> <li> 10.6 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%eb%8d%b0%ec%9d%b4%ed%84%b0-%ec%a0%84%ec%86%a1-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">데이터 전송 프로토콜</a> </li> <li> 10.7 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ec%9a%b4%ec%98%81-%eb%b0%8f-%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b3%b5%ea%b5%ac">운영 및 데이터 복구</a> </li> <li> 10.8 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ed%99%98%ea%b2%bd%eb%b3%80%ec%88%98">환경변수</a> </li> <li> 10.9 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-GUI">부록 A: 다양한 환경에서 Git 사용하기</a></h2> <ol> <li> A1.1 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-GUI">GUI</a> </li> <li> A1.2 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Visual-Studio">Visual Studio</a> </li> <li> A1.3 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Eclipse">Eclipse</a> </li> <li> A1.4 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Bash">Bash</a> </li> <li> A1.5 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Zsh">Zsh</a> </li> <li> A1.6 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Git-in-Powershell">Git in Powershell</a> </li> <li> A1.7 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-Git-%eb%aa%85%eb%a0%b9%ec%96%b4">부록 B: 애플리케이션에 Git 넣기</a></h2> <ol> <li> A2.1 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-Git-%eb%aa%85%eb%a0%b9%ec%96%b4">Git 명령어</a> </li> <li> A2.2 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-JGit">JGit</a> </li> <li> A2.4 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-go-git">go-git</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ec%84%a4%ec%b9%98%ec%99%80-%ec%84%a4%ec%a0%95">부록 C: Git 명령어</a></h2> <ol> <li> A3.1 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ec%84%a4%ec%b9%98%ec%99%80-%ec%84%a4%ec%a0%95">설치와 설정</a> </li> <li> A3.2 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b0%80%ec%a0%b8%ec%98%a4%ea%b8%b0%ec%99%80-%ec%83%9d%ec%84%b1%ed%95%98%ea%b8%b0">프로젝트 가져오기와 생성하기</a> </li> <li> A3.3 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ec%8a%a4%eb%83%85%ec%83%b7-%eb%8b%a4%eb%a3%a8%ea%b8%b0">스냅샷 다루기</a> </li> <li> A3.4 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Branch%ec%99%80-Merge">Branch와 Merge</a> </li> <li> A3.5 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ea%b3%b5%ec%9c%a0%ed%95%98%ea%b3%a0-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8%ed%95%98%ea%b8%b0">공유하고 업데이트하기</a> </li> <li> A3.6 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%eb%b3%b4%ea%b8%b0%ec%99%80-%eb%b9%84%ea%b5%90">보기와 비교</a> </li> <li> A3.7 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Debugging">Debugging</a> </li> <li> A3.8 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Patch-%ed%95%98%ea%b8%b0">Patch 하기</a> </li> <li> A3.9 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Email">Email</a> </li> <li> A3.10 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%eb%8b%a4%eb%a5%b8-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c">다른 버전 관리 시스템</a> </li> <li> A3.11 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ea%b4%80%eb%a6%ac">관리</a> </li> <li> A3.12 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Plumbing-%eb%aa%85%eb%a0%b9%ec%96%b4">Plumbing 명령어</a> </li> </ol> </li> </ol> </div> </div> </div> <span class="light" id="edition"> 2nd Edition </span> </div> <div id="main" data-pagefind-filter="category:book" data-pagefind-meta="category:Book" data-pagefind-weight="0.05" data-pagefind-body class="book edition2"> <h1>3.1 Git 브랜치 - 브랜치란 무엇인가</h1> <div> <p></p><p>모든 버전 관리 시스템은 브랜치를 지원한다. 개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다. 코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있는데, 이렇게 독립적으로 개발하는 것이 브랜치다.</p><p>사람들은 브랜치 모델이 Git의 최고의 장점이라고, Git이 다른 것들과 구분되는 특징이라고 말한다. 당최 어떤 점이 그렇게 특별한 것일까. Git의 브랜치는 매우 가볍다. 순식간에 브랜치를 새로 만들고 브랜치 사이를 이동할 수 있다. 다른 버전 관리 시스템과는 달리 Git은 브랜치를 만들어 작업하고 나중에 Merge 하는 방법을 권장한다. 심지어 하루에 수십 번씩해도 괜찮다. Git 브랜치에 능숙해지면 개발 방식이 완전히 바뀌고 다른 도구를 사용할 수 없게 된다.</p> <h2 id="_git_branches_overview">브랜치란 무엇인가</h2> <div class="paragraph"> <p>Git이 브랜치를 다루는 과정을 이해하려면 우선 Git이 데이터를 어떻게 저장하는지 알아야 한다.</p> </div> <div class="paragraph"> <p>Git은 데이터를 Change Set이나 변경사항(Diff)으로 기록하지 않고 일련의 스냅샷으로 기록한다는 것을 <a href="/book/ko/v2/ch00/ch01-getting-started">시작하기</a> 에서 보여줬다.</p> </div> <div class="paragraph"> <p>커밋하면 Git은 현 Staging Area에 있는 데이터의 스냅샷에 대한 포인터, 저자나 커밋 메시지 같은 메타데이터, 이전 커밋에 대한 포인터 등을 포함하는 커밋 개체(커밋 Object)를 저장한다. 이전 커밋 포인터가 있어서 현재 커밋이 무엇을 기준으로 바뀌었는지를 알 수 있다. 최초 커밋을 제외한 나머지 커밋은 이전 커밋 포인터가 적어도 하나씩 있고 브랜치를 합친 Merge 커밋 같은 경우에는 이전 커밋 포인터가 여러 개 있다.</p> </div> <div class="paragraph"> <p>파일이 3개 있는 디렉토리가 하나 있고 이 파일을 Staging Area에 저장하고 커밋하는 예제를 살펴 보자. 파일을 Stage 하면 Git 저장소에 파일을 저장하고(Git은 이것을 Blob이라고 부른다) Staging Area에 해당 파일의 체크섬을 저장한다(<a href="/book/ko/v2/ch00/ch01-getting-started">시작하기</a> 에서 살펴본 SHA-1을 사용한다).</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git add README test.rb LICENSE $ git commit -m 'The initial commit of my project'</code></pre> </div> </div> <div class="paragraph"> <p><code>git commit</code> 으로 커밋하면 먼저 루트 디렉토리와 각 하위 디렉토리의 트리 개체를 체크섬과 함께 저장소에 저장한다. 그다음에 커밋 개체를 만들고 메타데이터와 루트 디렉토리 트리 개체를 가리키는 포인터 정보를 커밋 개체에 넣어 저장한다. 그래서 필요하면 언제든지 스냅샷을 다시 만들 수 있다.</p> </div> <div class="paragraph"> <p>이 작업을 마치고 나면 Git 저장소에는 다섯 개의 데이터 개체가 생긴다. 각 파일에 대한 Blob 세 개, 파일과 디렉토리 구조가 들어 있는 트리 개체 하나, 메타데이터와 루트 트리를 가리키는 포인터가 담긴 커밋 개체 하나이다.</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/commit-and-tree.png" alt="커밋과 트리 데이터"> </div> <div class="title">그림 9. 커밋과 트리 데이터</div> </div> <div class="paragraph"> <p>다시 파일을 수정하고 커밋하면 이전 커밋이 무엇인지도 저장한다.</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/commits-and-parents.png" alt="커밋과 이전 커밋"> </div> <div class="title">그림 10. 커밋과 이전 커밋</div> </div> <div class="paragraph"> <p>Git의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것이다. 기본적으로 Git은 <code>master</code> 브랜치를 만든다. 처음 커밋하면 이 <code>master</code> 브랜치가 생성된 커밋을 가리킨다. 이후 커밋을 만들면 <code>master</code> 브랜치는 자동으로 가장 마지막 커밋을 가리킨다.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">노트</div> </td> <td class="content"> <div class="paragraph"> <p>Git 버전 관리 시스템에서 “master” 브랜치는 특별하지 않다. 다른 브랜치와 다른 것이 없다. 다만 모든 저장소에서 “master” 브랜치가 존재하는 이유는 <code>git init</code> 명령으로 초기화할 때 자동으로 만들어진 이 브랜치를 애써 다른 이름으로 변경하지 않기 때문이다.</p> </div> </td> </tr> </table> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/branch-and-history.png" alt="브랜치와 커밋 히스토리"> </div> <div class="title">그림 11. 브랜치와 커밋 히스토리</div> </div> <div class="sect3"> <h3 id="_create_new_branch">새 브랜치 생성하기</h3> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>브랜치를 하나 새로 만들면 어떨까. 브랜치를 하나 만들어서 놀자. 아래와 같이 <code>git branch</code> 명령으로 <code>testing</code> 브랜치를 만든다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git branch testing</code></pre> </div> </div> <div class="paragraph"> <p>새로 만든 브랜치도 지금 작업하고 있던 마지막 커밋을 가리킨다.</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/two-branches.png" alt="한 커밋 히스토리를 가리키는 두 브랜치"> </div> <div class="title">그림 12. 한 커밋 히스토리를 가리키는 두 브랜치</div> </div> <div class="paragraph"> <p>지금 작업 중인 브랜치가 무엇인지 Git은 어떻게 파악할까. 다른 버전 관리 시스템과는 달리 Git은 'HEAD’라는 특수한 포인터가 있다. 이 포인터는 지금 작업하는 로컬 브랜치를 가리킨다. 브랜치를 새로 만들었지만, Git은 아직 <code>master</code> 브랜치를 가리키고 있다. <code>git branch</code> 명령은 브랜치를 만들기만 하고 브랜치를 옮기지 않는다.</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/head-to-master.png" alt="현재 작업 중인 브랜치를 가리키는 HEAD"> </div> <div class="title">그림 13. 현재 작업 중인 브랜치를 가리키는 HEAD</div> </div> <div class="paragraph"> <p><code>git log</code> 명령에 <code>--decorate</code> 옵션을 사용하면 쉽게 브랜치가 어떤 커밋을 가리키는지도 확인할 수 있다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log --oneline --decorate f30ab (HEAD -&gt; master, testing) add feature #32 - ability to add new formats to the central interface 34ac2 Fixed bug #1328 - stack overflow under certain conditions 98ca9 The initial commit of my project</code></pre> </div> </div> <div class="paragraph"> <p>“master” 와 “testing” 이라는 브랜치가 <code>f30ab</code> 커밋 옆에 위치하여 이런식으로 브랜치가 가리키는 커밋을 확인할 수 있다.</p> </div> </div> <div class="sect3"> <h3 id="_switching_branches">브랜치 이동하기</h3> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p><code>git checkout</code> 명령으로 다른 브랜치로 이동할 수 있다. 한번 <code>testing</code> 브랜치로 바꿔보자.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git checkout testing</code></pre> </div> </div> <div class="paragraph"> <p>이렇게 하면 HEAD는 testing 브랜치를 가리킨다.</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/head-to-testing.png" alt="HEAD는 testing 브랜치를 가리킴"> </div> <div class="title">그림 14. HEAD는 testing 브랜치를 가리킴</div> </div> <div class="paragraph"> <p>자, 이제 핵심이 보일 거다! 커밋을 새로 한 번 해보자.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ vim test.rb $ git commit -a -m 'made a change'</code></pre> </div> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/advance-testing.png" alt="HEAD가 가리키는 testing 브랜치가 새 커밋을 가리킴"> </div> <div class="title">그림 15. HEAD가 가리키는 testing 브랜치가 새 커밋을 가리킴</div> </div> <div class="paragraph"> <p>이 부분이 흥미롭다. 새로 커밋해서 <code>testing</code> 브랜치는 앞으로 이동했다. 하지만, <code>master</code> 브랜치는 여전히 이전 커밋을 가리킨다. <code>master</code> 브랜치로 되돌아가보자.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git checkout master</code></pre> </div> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/checkout-master.png" alt="HEAD가 Checkout 한 브랜치로 이동함"> </div> <div class="title">그림 16. HEAD가 Checkout 한 브랜치로 이동함</div> </div> <div class="paragraph"> <p>방금 실행한 명령이 한 일은 두 가지다. <code>master</code> 브랜치가 가리키는 커밋을 HEAD가 가리키게 하고 워킹 디렉토리의 파일도 그 시점으로 되돌려 놓았다. 앞으로 커밋을 하면 다른 브랜치의 작업들과 별개로 진행되기 때문에 <code>testing</code> 브랜치에서 임시로 작업하고 원래 <code>master</code> 브랜치로 돌아와서 하던 일을 계속할 수 있다.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">노트</div> </td> <td class="content"> <div class="title">브랜치를 이동하면 워킹 디렉토리의 파일이 변경된다</div> <div class="paragraph"> <p>브랜치를 이동하면 워킹 디렉토리의 파일이 변경된다는 점을 기억해두어야 한다. 이전에 작업했던 브랜치로 이동하면 워킹 디렉토리의 파일은 그 브랜치에서 가장 마지막으로 했던 작업 내용으로 변경된다. 파일 변경시 문제가 있어 브랜치를 이동시키는게 불가능한 경우 Git은 브랜치 이동 명령을 수행하지 않는다.</p> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>파일을 수정하고 다시 커밋을 해보자.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ vim test.rb $ git commit -a -m 'made other changes'</code></pre> </div> </div> <div class="paragraph"> <p>프로젝트 히스토리는 분리돼 진행한다(<a href="/book/ko/v2/ch00/divergent_history">갈라지는 브랜치</a>). 우리는 브랜치를 하나 만들어 그 브랜치에서 일을 좀 하고, 다시 원래 브랜치로 되돌아와서 다른 일을 했다. 두 작업 내용은 서로 독립적으로 각 브랜치에 존재한다. 커밋 사이를 자유롭게 이동하다가 때가 되면 두 브랜치를 Merge 한다. 간단히 <code>branch</code>, <code>checkout</code>, <code>commit</code> 명령을 써서 말이다.</p> </div> <div id="divergent_history" class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/advance-master.png" alt="갈라지는 브랜치"> </div> <div class="title">그림 17. 갈라지는 브랜치</div> </div> <div class="paragraph"> <p><code>git log</code> 명령으로 쉽게 확인할 수 있다. 현재 브랜치가 가리키고 있는 히스토리가 무엇이고 어떻게 갈라져 나왔는지 보여준다. <code>git log --oneline --decorate --graph --all</code> 이라고 실행하면 히스토리를 출력한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log --oneline --decorate --graph --all * c2b9e (HEAD, master) made other changes | * 87ab2 (testing) made a change |/ * f30ab add feature #32 - ability to add new formats to the * 34ac2 fixed bug #1328 - stack overflow under certain conditions * 98ca9 initial commit of my project</code></pre> </div> </div> <div class="paragraph"> <p>실제로 Git의 브랜치는 어떤 한 커밋을 가리키는 40글자의 SHA-1 체크섬 파일에 불과하기 때문에 만들기도 쉽고 지우기도 쉽다. 새로 브랜치를 하나 만드는 것은 41바이트 크기의 파일을(40자와 줄 바꿈 문자) 하나 만드는 것에 불과하다.</p> </div> <div class="paragraph"> <p>브랜치가 필요할 때 프로젝트를 통째로 복사해야 하는 다른 버전 관리 도구와 Git의 차이는 극명하다. 통째로 복사하는 작업은 프로젝트 크기에 따라 다르겠지만 수십 초에서 수십 분까지 걸린다. 그에 비해 Git은 순식간이다. 게다가 커밋을 할 때마다 이전 커밋의 정보를 저장하기 때문에 Merge 할 때 어디서부터(Merge Base) 합쳐야 하는지 안다. 이런 특징은 개발자들이 수시로 브랜치를 만들어 사용하게 한다.</p> </div> <div class="paragraph"> <p>이제 왜 그렇게 브랜치를 수시로 만들고 사용해야 하는지 알아보자.</p> </div> </div> <div id="nav"><a href="/book/ko/v2/Git의-기초-요약">prev</a> | <a href="/book/ko/v2/Git-브랜치-브랜치와-Merge-의-기초">next</a></div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10