본문 바로가기

DevOps/Git

Git, GitHub 사용하기 기초 3(pull, push, fetch)

개인 공부를 하며 정리한 글입니다.

틀린 부분, 수정할 부분이 있다면 언제든 피드백 환영입니다 :)

 


1.  가입하고 토큰 만들기


 

  1. Sign Up으로 가입 후 로그인

 

  1. Personal access token 만들기
    • 우측 상단의 프로필 - Settings
    • Developer Settings
    • Personal access tokens - Generate new token
    • repo 및 원하는 기능에 체크, 기간 설정 뒤 Generate token
    • 체크박스에 대한 자세한 설명은 여기 공식문서로
  2. 토큰 컴퓨터에 저장하기
    • Windows 자격 증명 관리자
    • Windows 자격 증명 선택
    • git:https://github.com 자격 정보 생성
    • 사용자명과 토큰 붙여넣기

2.  원격 저장소 사용하기


1 ) GitHub 레포지토리 생성 후 복붙 명령어

$ git remote add origin (원격 저장소 주소)
  • 로컬의 Git 저장소에 원격 저장소로의 연결 추가
    • 원격 저장소 이름에 흔히 origin 사용. 다른 것으로 수정 가능
$ git branch -M main
  • GitHub 권장 - 기본 브랜치명을 main으로
$ git push -u origin main
  • 로컬 저장소의 커밋 내역들 원격으로 push(업로드)
    • -u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결

2 ) 원격 목록 보기

$ git remote

📢 자세히 보기: git remote -v

 

3 ) 원격 지우기

    - 로컬 프로젝트와의 연결만 없애는 것. GitHub의 레포지토리는 지워지지 않음

$ git remote remove (origin 등 원격 이름)

 

 

github 에 저장하는 법이 보고 싶으신 분은 여기로

https://daunje0.tistory.com/58

 

Github 에서 원격 저장소를 만들어 보자

원격 저장소 만들기 git hub의 흔히 Repository 라고 하는 원격 저장소에 처음 올리는 건 너무나도 막막하다... 개발자를 준비하시거나 이제 막 git 을 써봐야겠다고 생각하시는 분들을 위해 작성해본

daunje0.tistory.com

 

 


4.  GitHub에서 프로젝트 다운받기


  • Download ZIP: 파일들만 다운받음, Git 관리내역 제외
  • Git clone: Git 관리내역 포함 다운로드

여기서 주소 복사 후 아래 커맨드에 복붙

터미널이나 Git Bash에서 대상 폴더 이동 후

$ git clone (원격 저장소 주소)

5. Push, Pull


1 ) 원격으로 커밋 밀어올리기(push)

  1. 아래 명령어로 push
    • 이미 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능
$ git push

 

  • 현재 폴더를 그대로 업로드 하는 것이 아니라, 지금까지의 이력/버전(commit)을 push 하는 것

 

2 ) 원격의 커밋 당겨오기(pull)

  1. 아래 명령어로 pull
$ git pull

 


 

3 ) 협업상 충돌 발생 해결하기  (pull 할 것이 있을 때 push를 하면?)

 

  1. 즉 팀원이 먼저 push를 했고, 내가 동기화가 안 되있을 때
  2. push 시, 적용 불가 충돌 발생함
    • 원격에 먼저 적용된 새 버전이 있으므로 적용 불가
    • pull 해서 원격의 버전을 받아온 다음 push 가능

 

  1. push 할 것이 있을 시 pull 하는 두 가지 방법 
# merge 방식
$ git pull --no-rebase
#  rebase 방식
$ git pull --rebase

📢 pull 을 할 때 rebase 협업시 사용 OK

 

  1. push하기

 


 

4 )  로컬의 내역 강제 push해보기

  1. 로컬의 내역 충돌 전으로 reset
  2. 아래 명령어로 원격에 강제 적용
$ git push --force
 

이 상황은 로컬 저장소의 커밋 히스토리가 원격 저장소의 커밋 히스토리보다 뒤쳐져 있는데 푸시를 하였으므로 발생하는 에러이다. 하지만 지금 우리가 원하는 것은 이 뒤쳐져 있는 로컬 저장소의 커밋 히스토리를 원격 저장소의 커밋 히스토리로 강제로 덮어쓰는 것이므로 이를 위한 옵션 -f 또는 --force 를 명령어에 추가하여야 한다.

 

이 때 로컬에 없고 원격에만 있었던 커밋들은 모두 날라간다.

팀원들이랑 레포지토리를 공유하는 상황이면 아주 곤란해질 수 있다.
이미 원격에 올라간 커밋을 흔적도 없이 지우고 싶어서 reset --hard 한 후에 git push --force 옵션을 쓸 수도 있기는 하다. force 옵션을 쓰려면 아래 조건들을 체크하고 신중히 사용해야한다.

  • 나 혼자만 사용하는 브랜치에 커밋을 push하였고, 이를 깔끔히 되돌리고 싶은 경우
  • 팀원들과 직접 커뮤니케이션해서 내가 되돌린 커밋을 pull로 땡겨간 팀원이 없다고 확인된 경우

하지만 보통 원격에 올라간 커밋을 롤백을 하려는 경우는 흔적이 남기는 해도 안전한 revert 를 사용하는 것을 추천한다.


5.  원격의 브랜치 다루기


1 )  로컬에만 생성된 브랜치를 원격에 적용하기

 

원격에  로컬 브랜치를 적용하려면 

# $ git push -u (원격저장소 명) (브랜치 명)
$ git push -u origin (브랜치 명)

 

로컬 + 원격 브랜치 확인하기

$ git branch --all

기존의 git branch 만 하면 로컬 브랜치만 확인이 된다.


2 )  원격에만 생성된 브랜치를 로컬에 적용하기

 

1. 원격의 변경사항 확인

$ git fetch
$ git brahcn -a

fetch로  from-remote 브랜치가 원격에 새로 생긴 걸 알 수 있다.

 

 

❗ fetch 와 pull 의 차이점

 

pull 을 실행하면, 원격 저장소의 내용을 가져와 자동으로 병합 작업을 실행하게 된다.

그러나 단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않은 경우에는

fetch 명령어를 사용하면 된다.

fetch 를 실행하면, 원격 저장소의 최신 이력을 확인할 수 있다.

이 때 가져온 최신 커밋 이력은 이름 없는 브랜치로 로컬에 가져오게 된다.

 

다른 작업자들의 작업물을 바로 내 로컬에 반영하려면 fetch는 잊고 pull만 하면 된다(fetch + 내 파일에 반영이 pull 이므로)

 

 

 

2. 원격 브랜치 로컬에 생성하여 연결하고 switch

# git switch -t origin/ (가져올 원격 브랜치 명)
$ git switch -t origin/from-remote

로컬에도 from- remote 브랜치가 생성됬다

 

3. 원격 브랜치 삭제

$ git push (원격 이름) --delete (원격의 브랜치명)

위와 같은 결과를 실습하면서 보시고 싶으시면 얄코님의 Git & GitHub강의를  참고해주세요.

https://youtu.be/1I3hMwQU6GU

https://www.yalco.kr/@git-github/0-1/