만일 내가 깃허브에서 클론 해와서 내 로컬에서 새로운 커밋을 만들고 있는데 그 사이 다른 누군가 그사람의 새로운 커밋을 깃허브에 올리면 나는 그 변경된 커밋들이 현재 내 로컬 repo에는 없는데 어떻게 협업을 하지?
그럴 때 쓰는 명령어가 git pull /git fetch 이다.
나의 개인적인 주관이지만 어감상
pull 한다. : 왜인지 당겨온다니까 '파일을 받아 끌어당긴다' 라는 느낌일 것 같다.
fetch 한다. : 생소한 단어라 한국어발음으로 검색하니 강아지들이 물어오는 행위를 나타내는 것 같다.
pull 과 달리 당기기까진 아니고 내앞까지 가져오는 것 같다,
어쨌거나 두 가지 다 remote repo에서 다른 사람이 올린 수정된 커밋들을 가져오는 명령어다.
이름이 다르면 다른 점이 적어도 하나 있는 법
가장 큰 차이는 수정된 커밋을 어디까지 옮겨놓는냐이다.
지난 번에 올린 글에 작업 공간을 참고해서 보면
git fetch는 Repository 까지
git pull은 Working Tree 까지
자세한 설명에 앞서 두가지 pointer에 대해서 알아보고 fetch 를 해보자
head 가 두 가지 있다.
현재 나의 로컬 작업환경 에 따라 움직이는 master , remote repo에서 받아온 순간 고정된 origin/master.
만일 새로운 커밋을 하고 push는 하지 않으면
master 는 움직이고 origin/master 는 고정되어있다.
push 한다면 origin/master 옮겨간다.
이제 내 로컬에 없는 새로운 커밋이 생기는 경우
나는 아래와 같이 깃허브를 통해서 커밋을 해봤다. 왜냐 다른 contributor 가 없으니까
아직 내 개인 로컬에서 아무것도 하지 않은 상태로
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
아까 푸시하고 나서 origin/master 가 옮겨졌다는 메세지만 뜬다.
1. fetch 하기 : git fetch remote이름 fetch해올브랜치이름
git fetch origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 734 bytes | 367.00 KiB/s, done.
From https://github.com/이름/Shopping
* branch master -> FETCH_HEAD
45fd4d2..cef893f master -> origin/master
git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree clean
내가 받아온 remote repo의 해드인 origin/master 은 나보다 1 커밋 앞서 있다. 그래서 간단하게 merge 할 수 있다.
만일 너의 로컬 브랜치 master을 업데이트 하라면 git pull 을 사용해라
2. pull 하기 : git pull remote레포이름 새로생긴커밋있는브랜치이름
git pull origin master
From https://github.com/이름/Shopping
* branch master -> FETCH_HEAD
Updating 45fd4d2..cef893f
Fast-forward
groceries.txt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
이는 정말 간단한 방법으로 브랜치도 기본값 하나뿐인 master으로 시도해본 것이지만
실제로는 이렇게 안쓰고
내가 만들던 브랜치와
남이 만든 브랜치를 같은 곳에 합치거나 아님 새로 마스터에 합치는 식으로 이루어지는데
이때 충분히 문제가 생길 수 있다.
merge할 때 다양한 방법이 있듯이
pull 할 때도 마찬가지로 다양한 루트가 있다.
차차 익숙해지자
'TIL > Git & Github' 카테고리의 다른 글
[TIL][Git][CLI] GitHub 랑 Git 이랑 다른 거야? - 2.clone 하기 (0) | 2022.04.28 |
---|---|
[TIL][Git][CLI] GitHub 랑 Git 이랑 다른 거야? - 1.push 하기 (0) | 2022.04.28 |
[TIL][Git][CLI] GIT으로 뭘할건데? - 4. merge 합치기! 삼단변신! (0) | 2022.04.27 |
[TIL][Git][CLI] GIT으로 뭘할건데? - 3. 새로운 Branch 에서 커밋하기 (0) | 2022.04.27 |
[TIL][Git][CLI] GIT으로 뭘할건데? - 2. 커밋하기 ( Commits) 파일수정해서 커밋하기 (0) | 2022.04.27 |