보통 저희가 작업을 할때는
git pull -> commit -> push 이런 순으로 진행을 할 것입니다.
이번시간에는 fetch을 통해서 push을 할 수 있고,
git fetch -> git merge FETCH_HEAD -> commit -> push
fetch을 통해서 어떤한 장점이 있는지 살펴보겠습니다.
로그를 보시면 초록색 main 이라고 보이시는 것이 저희의 지역저장소의 main 브렌치이고,
빨간색의 origin/main 이라는 것은 저희의 원격저장소 중에 origin이라는 이름의 저장소의 main 브렌치를 가르킵니다.
그리고 이 앞의 노란색 커밋 ID는 마지막으로 메인 브렌치의 어떤 버전을 가져왔는지 의미합니다.
그럼 a 디렉토리를 수정해보겠습니다.
그리고 커밋도 마치겠습니다.
그다음 로그를 확인해보면 저희의 현재 브렌치는 main이고 저희의 main 브렌치는 work 3a를 가리키고 있습니다.
그러나 origin/main은 여전히 전 버전을 가리키고 있습니다.
그렇다면 우리의 지역저장소 브렌치가 원격저장소의 브렌치보다 하나의 버전이 앞서 있다라는 것을 보여줍니다.
그렇담 git의 상태를 묻는다면 우리의 브렌치가 origin/main 브렌치보다 한 버전 앞서있고
그렇기 때문에 push을 해야한다고 뜨고 있습니다.
이제 push을 때리고, git log를 살펴본다면
origin/main이 브렌치와 main의 브렌치가 같은 곳에 있는 것을 확인할 수 있습니다.
이번에 b라는 컴퓨터에서 작업을 한다면 pull로 우선 당겨와야겠죠?
하지만 이번시간엔 git fetch라는 것으로 당겨와보겠습니다.
git fetch
이렇게 당겨왔다면 a에서 마지막으로 작업했던 3a라는 내용이 있어야 할 것 같지만
오잉?? 어디갔지..? 보시는 것같이 없습니다..
그럼 로그를 한번 살펴보겠습니다.
현재 저희의 지역저장소의 위치는 여전히 b의 마지막 버전에 머물러있고,
origin/main 가 main 브렌치보다 한칸 더 앞서 있습니다.
그럼 git status는?
저희의 브렌치가 origin/main 보다 하나의 커밋만큼 뒤쳐져있다고 하고
pull 을 하라고 써져있네요.
그렇다면 두가지 선택지가 생깁니다.
1. git pull
2. origin/main을 여러분의 main 브렌치로 merge
git merge origin/main
merge를 하시고 log를 보시면 ?
보시는 것처럼 pull을 한 것과 똑같은 모습을 한 것을 볼 수 있습니다.
git pull = git fetch : git merge origin/main
그렇다면 git fetch를 통해서 무엇을 할 수 있는걸까?
내가 어떤 브렌치를 병합할지 신경 쓰는것은 귀찮은 일인데
git에서는 fetch를 할때마다 .git 디렉토리안에 FETCH_HEAD 라는 파일을 만듭니다.
.
pull은 원격저장소에 가장 최근에 fetch 했던 것을 merge 하는 것이였네요!
이렇게 해서 fetch로 remote 브렌치를 배웠고, remote branch을 지역 branch로 merge하는 것을 배웠고요!
그렇다면 언제 쓰는 것 일까요?
여러분들이 신중하게 git의 데이터를 pull 하고 싶을때 결합은 나중에하고 가져오고 싶다면
fetch라는 것을 사용하면 되겠네요!
'Git' 카테고리의 다른 글
Git cherry-pick (0) | 2024.01.31 |
---|---|
Git cherry-pick & rebase (0) | 2024.01.31 |
Git CLI 협업2 (0) | 2024.01.31 |
Git CLI 협업 (1) | 2024.01.31 |
Git CLI merge & conflict 병합 (1) | 2024.01.23 |