Push와 Pull
1. push (원격 커밋 밀어올리기)
- 깃의 명령어인 push에 대해 알아봅시다.
- push란? 로컬 저장소에 있는 변경 사항을 원격 저장소로 전송하는 것을 말합니다.
- 작업한 코드 or 파일 등의 수정 내용을 다른 사람들과 공유하거나, 여러 기기에서 작업한 내용을 동기화하는 데 사용됩니다.
2. 사용방법
- 그러면 직접 사용해봅시다.
- #1. bears.yaml의 member에 Park을 추가해주고 다음과 같이 입력하여 커밋해 줍니다.
Add Park to Bears
- #2. git push를 입력하여, 원격 저장소에 넣어줍니다.
- git push만 입력해도 되었던 이유는 전에 git push -u origin main라고 입력하여, 대상 원격 브런치가 지정되었기 때문입니다.
→ 그러면 정상적으로 push가 되었음을 확인할 수 있습니다.
3. pull (원격 커밋 당겨오기)
- 이제 pull에 대해 알아봅시다.
- pull이란? 원격 저장소에서 변경 사항을 로컬 저장소로 가져오는 작업을 말합니다.
- 일반적으로 다른 개발자가 작업한 새로운 코드 or 원격 저장소에 반영된 변경 사항을 로컬로 가져와서 자신의 작업 환경에 적용할 때 사용됩니다.
4. 사용방법
- 그럼 이제 사용해봅시다!
- #1. GitHub에 들어가서 bears.yaml에 들어가 Edit this file 버튼을 클릭합니다.
- #2. member에 Choi를 추가해주고 오른쪽 상단에 Commit changes...를 클릭해 줍니다.
- #3. 그러면 창이 나오는데, Commit message에 Add Choi to Bears라고 입력 후, Commit changes를 클릭해 줍니다.
→ 그러면 정상적으로 커밋이 되었음을 확인할 수 있습니다.
- #4. 그 다음, VSCode로 돌아가서 터미널에 git pull이라고 입력합니다.
→ 그러면, 방금 전에 추가한 내용이 VSCode의 bears.yaml에 추가된 것을 확인할 수 있습니다.
→ SourceTree를 보면, 로컬의 main과 원격의 main이 같은 자리에 위치한 것을 확인할 수 있습니다.
4. pull과 push 둘다 해야할 경우
- pull할 것이 있을 때, push를 하면 어떻게 될까요?
- #1. 먼저 로컬에서 Bears의 manager를 Sung으로 변경한 후, 다음과 같이 입력하여 커밋합니다.
Edit Bears manager
- #3. 그 다음 GitHub에 들어가 방금처럼 bears.yaml의 coach를 Kang으로 변경한 후, 다음과 같이 입력하여 커밋합니다.
Edit Bears Kang
- #4. 다시 VSCode로 돌아가 터미널에 git push를 입력해 줍니다.
→ 그러면 다음과 같이 나오게 됩니다. 원격 저장소에 먼저 적용된 새 버전이 있기 때문에 적용이 불가한 겁니다.
→ pull해서 원격의 버전을 받아온 다음, push가 가능합니다.
- 이럴 때, 두 가지 방법이 있습니다. 한번 하나씩 알아보겠습니다.
- #1. 터미널에 git pull --no-rebase라고 입력해 줍니다.
→ 그 다음 SourceTree로 보면, 로컬의 main 브랜치와 원격의 main 브랜치가 갈라진 것을 확인할 수 있습니다.
→ 이러면 자동으로 merge가 되는 것입니다.
- #2. 다른 방법도 써보기 위해 Edit Bear manager 시점으로 reset 해 줍니다.
- #3. 터미널에 git pull --rebase라 입력해 줍니다.
→ SourceTree로 보면, GitHub에서 작업한 것 다음에 로컬에서 작업한 것이 붙여졌습니다.
→ 이러면 rebase된 것입니다. (이 방식은 협업 시, 사용 가능합니다.)
- #4. 터미널에 git push를 입력해주고 GitHub에 들어가면, 정상적으로 push된 것을 확인할 수 있습니다.
4. 협업상 충돌 발생 해결하기
- 협업 중 충돌 상황이 발생했을 때, 어떻게 해결하는지 알아봅시다.
- #1. 로컬에서 Panthers의 member에 Kim을 추가한 후, 다음과 같이 입력하여 커밋해 줍니다.
Add Kim to Panthers
- #2. 이번엔 원격으로 같은 위치에 Jeon을 추가한 후, 다음과 같이 입력하여 커밋해 줍니다.
Add Jeon to Panthers
- 이제 push하면 충돌이 발생합니다. 이 문제를 해결해봅시다.
- #3. VSCode 터미널에 git pull --no-rebase를 입력해 줍니다.
→ 그러면 다음과 같이 나오게 됩니다. 둘 중 하나를 선택한 후, git commit을 입력하고 :wq로 저장하여 커밋해 줍니다.
→ 그러면 정상적으로 merge가 되었음을 확인할 수 있습니다.
- #4. 다른 방식도 해보기 위해 Add Kim to Panthers로 reset해 줍니다.
- #5. 터미널에 git pull --rebase를 입력해 줍니다.
- #6. Jeon으로 선택한 후, git add .를 입력하고 git rebase --continue를 입력해 줍니다.
→ 이러면, Add Kim to Panthers는 사라지게 됩니다.
→ Kim은 없앴기 때문에 새로 추가할 필요가 없어서 그렇습니다.
→ Jeon이 아니라 Kim을 선택했다면, Add Jeon to Panthers위에 Add Kim to Panthers가 추가되었을 것입니다.
5. 로컬의 내역을 강제 push
- 로컬의 내역을 원격에 강제로 적용하고 싶으면, 다음과 같이 입력하면 됩니다. (협업 시, 사전에 얘기가 되어있지 않다면, 권장하지 않습니다.)
git push --force
6. 정리하며
- 지금까지 push과 pull에 대해 알아보았습니다.
- 다음 시간엔 원격의 브랜치를 다루는 방법에 대해 알아보겠습니다.
※ 이 글은 얄팍한 코딩사전 님의 유튜브 강의를 참고하였습니다.
'Back-End Study > Git & GitHub' 카테고리의 다른 글
SourceTree로 원격 브랜치 다루기 (0) | 2024.02.16 |
---|---|
원격 브랜치 다루기 (0) | 2024.02.16 |
원격 저장소 사용하기 (1) | 2024.02.08 |
GitHub (1) | 2024.02.08 |
SourceTree로 브랜치 다루기 (0) | 2024.02.06 |