pull명령은 원격저장소의 최근 커밋을 지역저장소로 당겨오는 명령어입니다.
하지만 최근 커밋을 당겨오기전 원격저장소에 어떤 변화가 있는지 살펴봐야하지 않을까요??
이럴 때는 원격 브랜치에서 정보만 먼저 가져올수가 있습니다.
원격 master branch
지역저장소의 master브랜치 처럼 원격 저장소도 기본적으로 master브랜치가 생성됩니다.
cinetest01을 회사에서 사용하는 저장소라고 가정하고 cinetest02를 집에서 사용하는 저장소라고 가정해보겠습니다.
이 두 지역저장소는 cinetest라는 원격저장소와 연결이 되어있습니다.
cinetest 저장소를 보면 master브랜치가 잡혀있으며 home이라는 커밋이 가장 마지막 커밋입니다.
$git log --oneline
cinetest01 저장소에서 git log --oneline명령으로 log를 확인해보면 HEAD는 master를 가르키고 있으며 home이라는 커밋을 가장 최근에 커밋한 내역이라고 가르키고 있습니다.
여기에 home.txt파일을 만들고 새로운 커밋을 만들어 보겠습니다.
"cinetest01 home.txt"라는 메세지로 커밋하겠습니다.
$vim home.txt
$git add home.txt
$git commit -m "cinetest01 home.txt"
$git log --oneline
HEAD->master가 방금전 커밋한 "cinetest01 home.txt"를 가르키고 있습니다.
이 지역저장소의 가장 마지막 커밋이 "cinetest01 home.txt"라는 의미입니다.
하지만 origin/master, origin/HEAD는 "home"을 가르키고 있네요.
$git status
그 상태에서 status 명령을 사용하면 현재 master 브랜치가 origin에 있는 원격 master 브랜치의 버전보다 하나 앞서 있다는 것을 알수 있습니다.
그리고 git push명령으로 지역 저장소의 커밋을 원격 저장소로 올리라고 하네요.
$git push
$git log --oneline
push하여 원격 저장소로 올리고 log를 보니 master와 origin/master 브랜치가 같은 커밋을 가르키고 있습니다.
원격 branch 정보 가져오기 -- git fetch
fetch는 불러오다, 가져오다 라는 뜻이 있는것 처럼 git fetch명령을 사용하면 원격 저장소의 정보를 가져올수 있습니다.
pull 명령이 원격 저장소의 커밋을 가져와 무조건 지역 저장소와 합친다면, fetch 명령은 원격 브랜치에 어떤 변화가 있는지에 대한 정보만 가져옵니다.
만약 작업을 할때 pull을 당겨오기전 fetch를 이용하여 수정된 정보를 먼저 확인하고 나서 pull을 이용해 커밋 내역을 당겨올수가 있습니다.
이번에는 회사에서 사용하는 저장소라고 가정한 cinetest02디렉터리로 이동하여 작업을 해보겠습니다.
$cd ..
$cd cinetest02
$git fetch
fetch를 하고나니 무언거 문구는 뜨는데 cinetest01에서 작업했던 파일이 당겨와 졌을까요??
$ls -la
cinetest01에서 새로만들었던 home.txt가 당겨지지 않았네요.
그러면 log 명령을 통해 살펴보겠습니다.
$git log --oneline
어라? cinetest02 저장소에는 HEAD->master 만 있고 원격 저장소의 origin/master는 보이지 않습니다.
원격 저장소의 최근 커밋정보를 가져오긴 했지만 아직 합치지 않아서 원래 cinetest02에 있던 커밋내역만 나타나기 때문입니다.
$git status
status 명령으로 확인해보면 현재 브랜치는 origin/master 브랜치에 비해 1개의 커밋이 뒤쳐져있다고 합니다.
pull 명령을 사용해 지역저상소를 업데이트 하라고 하네요!
그렇다면 fetch를 통해 가져온 정보는 어디에 있을까요?
fetch를 통해 가져온 정보는 origin/master 브랜치가 아닌 FETCH_HEAD라는 브랜치로 가져옵니다.
이 브랜치로 가져온 정보는 지역저장소에 바로 반영되지 않습니다.
$git checkout FETCH_HEAD
fetch해서 가져온 정보를 확인하고 싶다면 checkout FETCH_HEAD 명령을 이용하여 확인해야합니다.
또한 지역저장소의 최신 커밋과 패치한 커밋의 차이를 비교 하려면 git diff HEAD origin/master 명령을 이용해야합니다.
$git log
이제 log를 보면 origin/master와 origin/HEAD가 표시되어있네요.
fetch로 가져온 원격 브랜치의 최신 커밋정보입니다.
이러한 내용을 살펴보고 원격 브랜치의 최신 커밋을 지역저장소로 당겨올지 말지를 결정할수 있습니다.
이후 원격브랜치의 정보를 당겨오고 싶다면 master 브랜치로 이동하여 원격저장소를 pull로 당겨오거나 merge를 통해 FETCH_HEAD를 병합하면됩니다.
$git checkout master
$git merge FETCH_HEAD
$git log --oneline
본 포스팅은 DO it! 지옥에서 온 문서 관리자 깃&깃허브 입문 도서를 참고하며 공부한 내용을 포스팅 하였습니다.
'Git > Github' 카테고리의 다른 글
[Github] GIthub에서 README.md 작성하기 (0) | 2022.06.29 |
---|---|
[Git & GitHub] 협업하기 (0) | 2022.06.28 |
[Git & GitHub] 여러 PC에서 원격 저장소 함께사용하는법 (0) | 2022.06.26 |
[Git & GitHub] 깃허브 SSH(Secure Shell) 원격 접속 (0) | 2022.06.25 |
[Git & GitHub] 원격저장소에 파일 올리고 내려받기(push & pull) (0) | 2022.06.24 |