Git (6)

깨진알·2023년 11월 29일

Git

목록 보기
6/13

Git branch 사용하기

브랜치란, 하나의 코드 관리 흐름이라고 생각하면 된다. 마스터 브랜치(master branch)는 레포지토리를 만들고 커밋을 하면 자동으로 생기는 기본 브랜치이다.

브랜치 다뤄보기

$ git branch [브랜치이름] # 브랜치 생성
$ git checkout [브랜치이름] # 브랜치 이동
$ git branch # 모든 브랜치 조회
$ git branch -d [브랜치이름] # 브랜치 삭제
$ git branch -b [브랜치이름] # 브랜치를 만들고 바로 이동하기

브랜치 merge하기

$ git merge [병합할 브랜치]

병합할 브랜치를 작성하면 된다. 커맨드를 입력하면 Git이 제공하는 기본 텍스트 에디터가 나올 것이다. :wq를 입력하면 merge가 되었다는 내용이 나올 것이다.

merge를 하다보면 중간에 conflict 오류를 발견할 것이다. conflict가 발생한 파일을 열어, merge 결과가 되었으면 하는 모습대로 코드를 고치면 쉽게 해결된다.

conflict가 났을 때, merge 자체를 취소해도 된다.

$ git merge --abort

merge 자체를 취소하는 커맨드이다. --abort 옵션을 주면 merge를 시도하기 이전 모습으로 돌아가게 된다. 이처럼 conflict가 발생한 파일들이 너무 많아서 conflict를 최소화할 수 있는 방식으로 파일들을 다시 수정하고 커밋한 다음에 merge를 하고 싶거나 그냥 좀더 나중에 merge를 하고 싶다면 merge 자체를 취소해도 된다.

여러 파일에서 conflict가 났을 때는?

개발 실무에서는 파일 여러 개를 수정하는 경우가 많다보니 merge할 때 conflict도 파일 여러 개에서 나는 경우가 많다. 원리는 파일 하나일 때와 같다.
conflict 결과는 git status를 통해서도 확인이 가능하다. 파일 여러개가 conflict가 났을 때는 파일 하나씩 conflict를 해결하고 git add [파일이름] 커맨드로 하나씩 staging area에 올리거나 (중간중간에 git status 커맨드로 현재 상태 확인하면서), 모든 파일들의 conflict를 다 해결하고 git add . 커맨드로 한번에 staging area에 올리고 커밋을 하면 된다.


origin이란?

$ git remote add origin [Git주소]

remote는 remote repository에 관한 작업을 할 때 쓰는 커맨드이다. 그리고 그 뒤의 add는 새로운 remote repository를 등록하겠다는 뜻이다. 즉, 작성한 주소의 remote repository를 origin이라는 이름으로 등록하겠다는 뜻이다. 이 커맨드를 실행하고 나면 [Git주소]를 origin으로 간단하게 나타낼 수 있게 되는 것이다.

왜 하필 origin일까? origin이 아닌 원하는 다른 단어를 입력해도 큰 상관은 없다. 하지만 Git에서는 remote repository를 최초로 추가할 때 origin이라는 이름으로 가리키는 것이 관례화되어 있다.

remote repository에 있는 브랜치

$ git push -u origin master

이 커맨드는 현재 local repository에 있는 master 브랜치의 내용(master 브랜치와 관계된 모든 커밋들)을 origin이라는 remote repository로 보낸다는 뜻이다. 만약 origin이라는 remote repository에 master 브랜치가 없으면 master 브랜치를 새로 생성하고 푸시하게 된다.

-u는 무슨 뜻일까? -u--set-upstream이라는 옵션의 약자이다. --set-upstream(-u) 옵션을 주면 local repository에 있는 master 브랜치가 origin에 있는 master 브랜치를 tracking(추적)하는 걸로 설정된다. tracking이라는 건 local respository의 한 브랜치가 remote repository의 한 브랜치와 연결되어 그것을 계속 바라보는 상태가 되는 것이라고 생각하면 된다. 이렇게 맺어진 연결 상태를 tracking connection이라고 한다.

만약 local repository에 A라는 브랜치가 있고, remote repository에 B라는 브랜치가 있을 때, 이런 tracking connection이 서로 맺어진 경우 B 브랜치를 A 브랜치의 upstream branch라고 한다. (예시에서는 A와 B로 표현했지만 보통은 같은 이름이 경우가 대부분이다.) 사용자가 현재 master 브랜치에 위치해 있을 때, $ git push라고만 써도 자동으로 remote repository의 master 브랜치를 대상으로 git push가 동작하고, $ git pull라고만 써도 remote repository의 master 브랜치를 대상으로 git pull이 동작된다.

사실 --set-upstream(-u) 옵션을 주지 않아도 그 후에 git pushgit pull을 할 수 있기는 하다. 하지만 맨 처음에 이 옵션을 주지 않으면 tracking connection이 없기 때문에 나중에 git push를 하고 싶을 때는 아래와 같이 작성해야 한다.

$ git push origin master:master
  • origin은 remote repository를 의미한다.
  • master:master에서 더 먼저 나오는 master는 local repository의 master 브랜치(~에서)를 나타내고, 더 뒤에 나오는 master는 remote repository의 master 브랜치(~으로)를 나타낸다.

이런 식의 복잡한 표현이 필요하므로, 처음부터 tracking connection을 설정하고 그 이후부터 git push, git pull이라고만 써서 푸시와 풀을 하는게 더 편할 것이다.

origin / master의 의미

  • (master) : local repository의 master 브랜치
  • (origin/master) remote repository의 master 브랜치

git push

$ git push --set-upstream [브랜치이름]

local repository에서 remote repository에 처음으로 푸시할 때는 --set-upstream을 작성해줘야 한다.

profile
프론트엔드 지식으로 가득찰 때까지

0개의 댓글