Git 교과서

코드 이력, 하나도 놓치지 마라!

버전 관리 시스템의 이해와 설치부터 커밋, 브랜치, 임시 처리, 병합, 복귀, 서브모듈, 태그까지
깃, 소스트리, 깃허브로 실습하며 기본기를 탄탄하게 다진다!

Yes24 교보문고 알라딘 인터파크 길벗

브랜치 전송


로컬 저장소의 브랜치를 원격 저장소로 전송하는 다른 방법을 살펴봅시다.


브랜치 푸시

– 깃의 푸시 작업은 로컬 저장소의 파일들을 원격 저장소로 전송합니다. 파일뿐만 아니라 브랜치 정보와 커밋까지 모두 전송합니다.

처음으로 로컬 저장소에 새로운 원격 저장소가 등록되면 다음과 같이 push 명령어를 사용할 때 오류 메시지가 출력됩니다.

infoh@DESKTOP MINGW64 /e/gitstudy06 (master)
$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

처음에는 커밋과 브랜치를 푸시하는 데 업스트림 설정이 필요합니다. 원격 저장소 연결만으로 업스트림이 자동으로 설정되지는 않습니다. 이는 깃이 원격 저장소의 어느 브랜치에 어떻게 푸시해야 할지 모르기 때문입니다.

그래서 처음 푸시 작업을 하면 깃은 사용자에게 업스트림이 설정되지 않았다는 오류 메시지를 출력합니다. 그리고 친절하게 설정하는 방법도 안내합니다. 오류 메시지에서 표시된 명령어를 입력하면 됩니다.

처음에는 다음과 같이 수동으로 트래킹 브랜치와 업스트림 설정을 해야 합니다.

$ git push --set-upstream origin master

예를 들어 현재 master 브랜치를 origin 서버의 master로 업스트림 설정하려면 다음과 같이 합니다.

infoh@DESKTOP MINGW64 /e/gitstudy06 (master)
$ git push --set-upstream origin master
git@211.110.1.195's password:
Counting objects: 36, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (24/24), done.
Writing objects: 100% (36/36), 2.84 KiB | 0 bytes/s, done.
Total 36 (delta 12), reused 0 (delta 0)
To ssh://211.110.1.195/home/git/remote/
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

Note: 처음 로컬 저장소가 원격 저장소에 연결되면 아이디와 패스워드를 묻습니다. 아이디와 패스워드를 정확하게 입력하면 성공적으로 푸시됩니다. 원격 저장소의 깃허브에서 제대로 푸시되었는지 확인할 수 있습니다.

접속할 때 “error: insufficient permission for adding an object to repository database”처럼 메시지가 출력된다면 서버 계정의 권한이 부족한 것입니다.

직접 서버를 운영한다면 다음과 같이 계정 권한을 변경해 줍니다.

[root@ns /home/git]# chmod -R g+ws *
[root@ns /home/git]# chgrp -R git *


브랜치 페치


리모트 브랜치 페치는 일반적인 커밋 페치와 동일합니다. 리모트 브랜치를 페치한다고 해서 자동으로 로컬 저장소에 새로운 브랜치가 생성되지는 않습니다. 페치 동작은 원격 저장소에서 리모트 브랜치 내용을 내려받기만 할 뿐이지 자동으로 병합하지 않기 때문입니다.

리모트 브랜치가 페치되면 깃은 단순히 원격저장소별칭/브랜치 포인터만 생성합니다. 원격 저장소에서 페치된 커밋들을 새로운 로컬 브랜치로 반영하려면 병합 명령을 실행해야 합니다.

$ git merge 원격저장소별칭/브랜치이름

가끔은 페치된 브랜치를 병합하지 않고 테스트만 하고 싶을 때도 있습니다. 이때는 원격 브랜치의 포인터를 사용하여 임시 브랜치를 생성하거나 직접 체크아웃할 수 있습니다.

$ git checkout -b 임시브랜치이름 origin/브랜치이름