Git 뿌시기 - branch

5864 단어 gitgit


버전관리를 할때마다 파일의 숫자가 커지고, 다양한 사람들에게 협엽되고 있는 상황에서는

다음과 같이 점점 더 버전관리를 하기가 어려워 질 것이다.

깃을 사용해서 매우 효율적으로 버전 관리가 가능해짐
작업이 분기되는 상황 -> branch를 만듬

기본적인 작업은 이미 하나의 브랜치에서 작업되고 있다고도 이해할 수 있음.

새로운 디렉토리에서 저장 후 2개의 버전 생성

branch를 사용하는 경우?

  • 기능을 버려야 할 가능성이 있는 경우 -> 분기 후 작업 진행
  • 개발 진행 중 지금까지 작업한 것을 서버에 반영 후, 여러 테스트를 하며 문제점이 없는지 테스트할때는 메인이 되는 작업과 테스트를 분기해야 되는 경우 등

현재 마스터라는 기본 브랜치를 사용하고 있음을 확인 가능

새로운 브랜치 생성

git branch exp_(기능명)

현재는 마스터 브랜치에 있으며, exp 브랜치로 이동하기 위해

git checkout exp

명령어를 통해 브랜치 이동

처음 브랜치를 팠을땐, 마스터브랜치, exp 브랜치 같은 상황 즉, 모두 같은 내용 그대로 공유함

exp 브랜치에서 f1.txt 파일을 수정 후 add, commit

다시 마스터 브랜치 이동 후 log를 체크해보면 2번째 버전까지만 있음을 확인 가능

exp 브랜치에서 f2.txt파일 만든후 add commit

다시 마스터 브랜치로 돌아오고 나면, f2.txt가 없는걸 확인 가능

branch 정보확인

git log --branches --decorate --graph (--oneline)

현재 저장소에 있는 모든 브랜치에 대한 로그정보 확인 가능

현재 exp에는 내용이 변경되었지만, master는 아직 변경 X
마스터 브랜치도 내용 변경 후 확인

exp 브랜치는 최신 커밋이 4이고 2라는 커밋으로부터 비롯된 것임을 확인 가능하며, 마스터 브랜치도 2에서 5로 이동했음을 확인 가능

브랜치간의 차이점을 확인하고 싶을 경우
: branch1에는 없고, branch2에는 있는 커밋 확인 가능

git log (branch1)..(branch2)

각각의 브랜치의 현재 상태 비교
mastert에는 있는데, exp에는 없는 걸 확인하는 로그

git diff (branch1)..(branch2)

branch 병합(MERGE)

현재까지의 작업 상황

exp의 내용을 master branch로 옮기고 싶은 경우 master branch 에서 exp를 merge

git checkout master
git merger exp

master는 자기가 작업한 버전5와 exp에서 작업한 3,4 버전을 모두 갖게 됨

이번엔 master를 exp로 가져와보자
-> exp와 master와 같은 커밋을 가지고 있음을 확인 가능

작업이 끝났으므로, exp는 없애버리자
master branch로 이동후

git branch -d (branch_name)

branch의 원리

맨 처음 git init을 하면 생성되는 HEAD 파일 : refs/heads/master

커밋 후 refs/heads/master 파일 생성

refs/heads/master 파일은 방금 내가 한 커밋을 가리키고 있음

두번째 커밋 이후엔

git log를 했을때 보여주는 가장 최신의 커밋을 알려주는 원리
: 깃은 헤드라는 파일을 갖고 있으며, 그 헤드라는 파일은 refs/heads/master를 가리키고 있고 이 파일은 가장 최근의 커밋한 커밋의 object id값을 가리키고 있기 때문에 깃 로그를 하면 헤드파일 -> 헤드의 마스터 파일 -> 마스터파일으 커밋 id값을 보고 가장 최신의 커밋을 알아낼 수 있음

깃에서 브랜치는 단지 refs 디렉토리 밑에 있는 파일을 의미함

새로운 브랜치 생성 후
refs/head/exp 밑에서 가장 최신의 커밋인 2를 가리키고 있음

rm .git/refs/head/exp

을 실행하면 exp 브랜치가 사라짐

vim .git/refs/head/exp

해당 디렉토리에 가장 최신 커밋 오브젝트의 아이디를 입력해 파일을 만든다면 exp라는 브랜치가 다시 생성됨

즉 깃에서, 브랜치는 단순히 텍스트 파일 하나임!

브랜치를 바꾼후에는 헤드파일이 변경됨
헤드는 refs/head/exp를 가리킴

f2.txt를 생성한다면, 헤드는 커밋3을 가리키고 있고,

마스터로 브랜치를 옮긴 후 헤드를 보면 커밋 2를 가리키고 있음을 확인 가능

좋은 웹페이지 즐겨찾기