View
git pull을 사용하다가 다른 사람이 수정한 코드를 내 코드로 덮어 씌우게 된 상황이 발생했다...
정확히는 원격 저장소의 변경사항을 받아오는 방법을 잘 몰랐기에 일어난 실수 🥲
그래서 다시 한번 정리를 해보려 한다!
원격 저장소의 변경사항을 받아오기 위한 방법은 두 가지가 있다
git fetch
git pull
간단히 두 개의 명령어를 살펴보면 이렇다.
fetch
- 원격 저장소의 데이터를 내 로컬에 가져오기만 하는 작업
- 변경사항을 확인 가능
pull
- 원격 저장소의 내용을 가져오고 자동으로 병합
git pull은 간단한 명령어로 동작하고 자동으로 병합까지 해주니 편리하기까지 하다.
하지만 무엇이 바뀌었는지 변경사항을 알려주지는 않는다.
그렇기 때문에 변경사항들을 확인하고 적절히 병합하여 원격 저장소에 안전하게 올리고 싶다면 fetch를 사용하면 된다.
git pull과 fetch를 사용하는 이유를 다시 되짚어보자
github는 혼자서만 사용하는 게 아니라 팀원들과 협업을 위해서 사용된다.
만약 내가 코드를 수정하고 있는 와중에 다른 팀원이 코드를 수정해서 push를 하고 저장소를 변경했다면?
그 이후에 내 작업물을 push 하려고 하면 거절 메시지를 받게 된다.
로컬 저장소와 원격 저장소의 커밋 변경사항이 동일해야 push를 할 수 있기 때문이다.
내 로컬을 수정 후 push 하려고 할 때 이미 원격 저장소에 변경 사항이 있다면 이런 경고를 마주한다.
hint: git pull을 하라고 되어있지만 fetch를 사용해서 진행할 것이다.
fetch를 사용하고 나면 이렇게 변경사항을 알 수 있다.
맨 마지막 줄에 나온 커밋 메시지를 이용해서 변경 내역도 확인할 수 있다.
git diff <커밋>
이렇게 원격 저장소에 변경했던 내역을 확인할 수 있다.
이제 merge를 해주면 되는데
만약 원격 저장소의 수정된 내역과 같은 곳을 수정했었다면 merge conflict라는 에러 메시지를 받을 수 있다.
충돌이 일어난 파일을 살펴보고
<<< , ===, >>>
이런 문구로 표시를 해준다. 이 부분을 수정해서 다시 add -> commit -> push 과정을 거치면
무사히 업로드가 완료된다!
하지만 또 다른 사람이 올린 게 새로 업데이트돼서 원격 저장소가 변경된다면 다시 충돌을 겪을 수 있다 ^0^
얼렁뚱땅 결론
한번에 처리되는 git pull 보단 fetch와 merge를 사용하는 게 더 안전하다.
웬만해서는 fetch를 해주고 로컬이 깨끗한 상태에서 pull을 해주자
적절히 섞어서 잘 사용하기~
'Git, Git-Hub' 카테고리의 다른 글
GitBook을 아시나요? +GitHub연동 (0) | 2022.11.02 |
---|---|
Git Commit Template 설정 (0) | 2022.06.20 |
Git 정체모를 1k, 5k 숫자의 향연 (4) | 2022.04.15 |
Git-Hub Repository public/private 변경하는 법 (0) | 2022.04.10 |
Git(깃) 이란 무엇인가? (0) | 2022.04.10 |