$ git push -u origin refs/heads/candidate/${_NODE_ENV}/*
위 명령은 origin
이라는 저장소의 refs/heads/candidates/${_NODE_ENV}/*
의 브랜치에 push를 한다. 이 명령어를 보고 시작한 Refspec 개념 정리입니다.
+ <src>:<dst>
+
: fast-forward가 아닌 업데이트를 허용한다는 의미, 생략 가능<src>
: source 패턴, 원본refs/heads/*
로 설정<dst>
: destination 패턴, 합쳐야 할 대상refs/remotes/리모트 저장소명/*
으로 Refs를 저장해 둔다.(로컬 저장소의 refs와 동일한 해시값을 가진다.)기본적으로 git은
git remote add
명령으로 생성한 설정을 참고하여 리모트 서버에서refs/heads/
에 있는 Refs를 가져다 로컬의refs/remotes/origin/
에 기록
git log
$ git log master
$ git log heads/master
$ git log refs/heads/master
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
git fetch
# .git/config
fetch = +refs/heads/*:refs/remotes/origin/*
이는 해당 리모트 저장소에서 git fetch
명령을 실행할 때 자동으로 사용되는 Refspec이다.
$ git fetch origin master:refs/remotes/origin/mymaster
리모트 브랜치 master
(원본)를 로컬 브랜치 origin/mymaster
(합쳐야 할 대상)로 가져온다.
git push
$ git push origin master
위에서 master
는 refs/heads/master:refs/heads/master
를 의미한다. <src>
는 푸쉬하기를 원하는 브랜치의 refs(원본), <dst>
는 리모트에 푸시가 될 때 업데이트 될 브랜치의 refs(합쳐야 할 대상)이다.
$ git push origin master:refs/heads/qa/master
로컬의 master
브랜치를 리모트의 qa/master
로 push한다.
정리하면서도 계속 헷갈리는 개념이다. 앞으로 cli로 삽질 하면서 익히는 수 밖에 없을 것 같다.