수학과의 좌충우돌 프로그래밍

06. git branch 생성과 정보확인하기 본문

git

06. git branch 생성과 정보확인하기

ssung.k 2019. 2. 7. 19:41



안녕하세요 강민성입니다.


이번 시간에는 git branch에 대해서 알아보도록 하겠습니다.


branch를 사전에 검색해보면 '식물의 가지' 를 의미합니다.


식물의 가지가 여러 갈래로 뻗어나가는 것 처럼 우리도 git 을 통해서 우리의 파일을


여러 갈래로 나눠서 문제를 해결할 수 있습니다.


다음 이미지는 두 개의 분기로 나눠져서 작업하는 모습으로


이럴 경우에는 branchr가 2개인 상황입니다.



그러면 별 다른 작업 없이도 우리는 하나의 branch를 쓰고 있다고 생각하면 되겠습니다.


그리고 이렇게 초기 브랜치의 이름을 master라고 합니다.


branch가 어떤 느낌인지 살짝 맛봤으니 제대로 알아보도록 하겠습니다.



git branch 를 알아보자


branch 만들기


이번에도 새로운 디렉토리에서 작업을 해보겠습니다.


다시 복습하는 차원에서



mkdir git_branch   (새로운 디렉토리 생성)


git init                    (디렉토리 초기화)


vim test1.txt           (test1.txt 생성 , 내용은 1)


git add test1.txt     (stage area 에 등록)


git commit -m "1"   (repository로 등록, 메세지는 1)


vim test1.txt           (내용을 12 로 수정)


git add test1.txt      (stage area 에 등록)


git commit -m "2"   (repository로 등록, 메세지는 2)


확인해보기 위해 log 를 확인해보면 다음과 같이 두 개의 commit이 잘 올라가 있습니다.

본격적으로 branch와 관련된 명령어들을 알아보겠습니다.


git branch

다음 명령어는 branch 목록을 확인할 수 있는 명령어입니다.


현재는 branch가 초기 branch인 master만 있습니다.


또한 앞에 붙은 *은 현재 해당 branch안에 있다는 의미입니다.

git branch {이름}

branch를 생성할 수 있는 명령어 입니다.


뒤에 입력한 이름을 가진 branch를 생성합니다.


git branch exp


로 exp 라는 이름을 가진 branch를 생성한 후, 목록을 확인해본 결과 exp가 생겼습니다.

git checkout {이름}

다른 branch로 이동하는 명령어 입니다.


해당 이름을 가진 branch로 이동하며 이동 결과, 앞에 붙는 * 의 위치가 바뀌게됩니다.




다음과 같이 branch를 만들면 exp는 만들어지는 순간,


사용자가 존재하던 branch와 같은 상황이 됩니다.


즉 존재하는 파일도, log의 상황도 동일합니다.

이제 exp 에 있는 상태에서 test1.txt의 내용을 123으로 수정하고,


메세지 3으로 commit 해보겠습니다.

exp에서 log 를 확인해보면 예상대로 3개의 commit을 확인 할 수 있고,

master로 checkout 후 파일의 내용 및 log를 확인해보면


commit 3 에 대한 내용을 찾아볼 수 가 없습니다.


이는 branch가 나뉘고 부터는 아예 독립적으로 서로에게 영향을 미치지 않는 걸


확인 할 수 있습니다.

실습은 진행하지 않았지만 유용한 명령어를 몇 가지 더 알려드리겠습니다.


git branch -d {이름}

작업을 끝내서 branch 가 필요가 없거나 잘못 만들 수 있습니다.


이럴 경우에는 다음과 같이 delete 의 약자 d 를 써서 branch 를 삭제해줍니다.


git checkout -b {이름}

git brach {이름} 과 git checkout {이름} 을 합친 것입니다.


branch를 만든 후 그 branch로 바로 checkout 하게 됩니다.




branch 정보 확인하기



branch가 두 개 정도에서 그친다면,


기억하기도 쉽고 헷갈릴 일도 많이 없을 겁니다.


하지만 branch는 점점 일어나고 commit 수도 쌓인다면,


구분하기가 쉽지 않겠죠.


이번에는 각 branch 간의 정보를 비교해보는 방법을 알아보겠습니다.



정보를 비교하기 위해서는 두 branch의 정보가 달라야 할 것입니다.


exp branch에서 3으로 새로운 commit을 하나 해주겠습니다.


과정은 생략합니다.


위에서 봤듯이 git log 를 통해서는 현재 몸을 담고 있는 branch의 정보만을 확인할 수 있습니다.


그래서 뒤에 추가적인 명령어를 붙여줘야 합니다.


git log --branches --decorate

어렵지않은 명령어 이므로 한 번에 두 개를 알아보도록 하겠습니다.


먼저 뒤에 --branches 를 붙여주면 모든 branch의 commit을 확인할 수 있습니다.


또한 --decorate를 통해 어느 branch에서의 commit인지 확인이 가능합니다.


commit의 고유 번호 옆에 (master) , (HEAD -> exp) 가 바로 --decorate 덕분입니다.


아래 log를 해석해보자면,


master branch는 commit이 2까지 진행되었고


exp branch는 commit이 3까지 진행되었으며 , HEAD가 exp 를 가르키므로


현재 exp 안에 있다는 의미입니다.


git log --branches --decoeate --graph

이번에는 뒤에 --graph가 붙었습니다.


의미 그대로 그래프를 그려서 보여주는 역할을 합니다.


좀 더 확실한 그래프를 위해서 새로운 commit을 추가해보겠습니다.


master branch 에서 test2.txt 파일을 만들고 4로 commit을 해줍니다.

master branch에서 git log를 확인하면 다음과 같이 1,2,4


왜냐면 3은 exp 의 commit 이었습니다.

이제 위의 명령어로 그래프를 살펴보면


좌측 편에 branch가 나눠지는 걸 확인할 수 있습니다.

다음으로는 commit 수가 많아지면 한 화면에 안들어올 정도로 많은 버젼들이 생길 것입니다.


이럴 때 불필요한 정보는 최소화해서 확인할 수 있습니다.


git log --branches --decorate --graph --oneline


이번에는 전체적인 정보가 아닌 특정 branch들을 비교하는 명령어를 알아보겠습니다.


git log {이름}..{이름}

log 뒤에 적는 순서에 따라서,


앞에 branch 에는 없고 뒤에 branch에만 있는 commit을 보여주게 됩니다.


따라서 git log master..exp 일 때는 

git log exp..master 일 때는 다음과 같은 정보를 확인할 수 있습니다.

좀 더 자세하게 내부적으로 들어가서 두 branch 간의 코드도 비교할 수 있습니다.


git diff {이름}..{이름}

아래 주어진 코드를 읽는 법은 저번 포스팅에서 다뤘었기에 자세한 설명은 생략하도록 하겠습니다.



마무리


아직 git에 대하여 아는게 많이 없는 초보지만,


git으로 협업을 하는데 있어서 branch를 사용하니 편리한 점이 많았습니다.


하지만 그 만큼 잘 모르고 사용할 경우에 branch끼리 꼬이고


해결을 못해서 더 애먹는 경우도 있으니


잘 숙지하시고 도움이 되시길 바랍니다 :)

Comments