-
Git - git push와pullGit 2023. 7. 20. 10:26반응형
Git Push와 Pull 사용법
이번 포스트에서는 Git에서 push와 pull을 사용하는 방법에 대해 알아보겠습니다. 예시를 통해 각 명령어의 사용법을 단계별로 설명하겠습니다.
Leopards의 members에 Evie 추가
로컬 저장소에서 Leopards의 members에 Evie를 추가하고 커밋 메시지를 작성해보겠습니다.
git add leopards.yaml git commit -m "Add Evie to Leopards"
로컬에서 커밋이 완료되었으므로 원격 저장소와 버전 차이가 발생합니다. 이를 맞추기 위해 push를 진행합니다.
Push 진행
git push
별도의 오류 메시지 없이 push가 잘 되었다면 GitHub 페이지에서 업데이트된 내용을 확인할 수 있습니다.
원격의 커밋 당겨오기 (Pull)
프로젝트를 진행하는 동료가 push를 한 경우 해당 소스를 받아와야 합니다.
- GitHub에서 Leopards의 members에 Dongho를 추가
- 커밋 메시지: Add Dongho to Leopards
이제 로컬에서 해당 내용을 적용하기 위해 pull을 해보겠습니다.
git pull
별다른 문제 없이 pull이 완료되면 원격에서 수정한 내용이 로컬에도 적용됩니다.
Pull할 내용이 있을 때 Push를 진행하면?
로컬에서 수정사항을 만들고 원격에서도 수정사항이 발생한 경우, 이러한 시점에서 push를 진행하면 오류가 발생합니다. 예를 들어:
- 로컬에서 Leopards의 manager를 Dooli로 수정 (커밋 메시지: Edit Leopards manager)
- GitHub에서 Leopards의 coach를 Lupi로 수정 (커밋 메시지: Edit Leopards coach)
이러한 상태에서 push를 시도하면 아래와 같은 오류가 발생합니다:
git push
Note: 원격에 먼저 적용된 새 버전이 있으므로 적용 불가. 먼저 pull 해서 원격의 버전을 받아온 다음 push가 가능합니다.Push와 Pull할 내용이 모두 있는 경우 해결 방법
두 가지 방법이 있습니다: merge와 rebase입니다.
Rebase 방식
git pull --rebase
명령어를 실행한 뒤 Sourcetree를 확인하면 두 가지의 브랜치가 생성된 것을 확인할 수 있습니다.
Merge 방식
우선 실습을 위해 Edit Leopards manager 시점으로 reset을 통해 버전을 돌려줍니다.
git pull --merge
merge 방식으로 pull을 하는 경우 브랜치가 나뉘어지지 않고 하나로 통합됩니다.
협업 시 충돌 해결하기
- 로컬에서 Panthers에 Maruchi 추가 (커밋 메시지: Add Maruchi to Panthers)
- 원격에서 Panthers에 Arachi 추가 (커밋 메시지: Add Arachi to Panthers)
- Pull하여 충돌 상황 마주하기 (--no-rebase와 --rebase 모두 시도해볼 것)
pull을 할 때 충돌이 발생하면 VSCode에서 수정 내용을 선택하라고 안내합니다. 수정 후 완료하면 아래와 같이 브랜치들이 생성됩니다.
--rebase를 사용해보기 위해 다시 Add Maruchi to Panthers 버전으로 reset을 시킨다. 다시 충돌상황을 만들고
pull해서 rebase할때는 상대방이 작업한 것을 먼저 적용 시킨다.우선 Accept Current Change를 진행한 뒤
git add .
git add . git rebase --continue
sourcetree를 보면 하나만 추가되어있다. Maruchi는 없애버렸기때문에 새로 추가할 필요가 없기 때문이다.
만약 Maruchi로 진행하였다면 Arachi 커밋 후 Maruchi 커밋 총 2개의 커밋이 추가될 것이다.
로컬의 내역 강제 Push
로컬의 내용이 원격보다 뒤쳐진 상태에서는 push가 불가능합니다. 하지만 만약 원격의 내용이 잘못되어 로컬의 내용으로 강제로 맞춰야 하는 상황이 생긴다면?
git push --force
로컬의 뒤쳐진 버전이 원격의 버전과 일치하게 됩니다.
반응형'Git' 카테고리의 다른 글
Git - 소스트리(sourcetree)에서 원격 브랜치 다루기 (0) 2023.07.20 Git - github원격 저장소 사용하기 (0) 2023.07.20 Git - Sourcetree로 merge, rebase하기 (0) 2023.07.19 Git - Branch충돌 해결하기 (0) 2023.07.19 Git - Merge 와 Rebase 차이와 실습 (0) 2023.07.19