[Git] clone, push, fetch, pull, pull request

miyeon·2023년 3월 23일
0

Git

목록 보기
6/6
post-thumbnail

Github

컴퓨터 속에만 잇는 저장소(로컬 저장소)가 아닌,
인터넷 세상 어딘가(원격)에 있는 다른 컴퓨터 속의 저장소

사용하는 이유 : 백업, 협업을 위해
파일을 올리는 것이 근본적인 목적이 아닌 Github는 버전을 올리는 것 (구글드라이브, 네이버 마이박스와의 차이점)

원격 저장소의 4가지 상호작용

클론(clone) : 원격 저장소를 복제 하기 = 다운로드
푸시(push) : 원격 자정소에 밀어 넣기 = 업로드
패치(fetch) : 원격 저장소를 일단 가져만 오기 (가져오되 병합하지는 않음)
풀(pull) : 원격 저장소를 가져와서 합치기 (패치 + 병합)

1) 클론

모든 버전들이 같이 복제
.git 파일도
명령어 git clone <주소>
origin : 원격저장소에 붙은 일종의 별명
origin/main : 원격 저장소 origin의 main
origin/HEAD : 원격 저장소 origin의 HEAD
로컬환경에서의 HEAD, 원격저장소의HEAD가 다를 수 있음

2) 푸시

명령어 : git push origin main
git push -u origin main = git push (한번만 이렇게 입력하면 계속 origin main 생략가능)

3) 패치

git fetch origin main

4) 풀

명령어 : git pull origin main
git pull -u origin main = git main

강의 중 나온 질문

Q) 작업을 하려면 어차피 머지를 해야할텐데, pull을 안하고 fetch를 쓰는 특수한 경우가 있나요?
A) 같은 부분을 다르게 수정한 경우, 충돌이 일어날 수 있기 때문에 패치를 사용한다.

Q) pull할때 conflict가 발생할 수 있나요?
A) 풀도 병합이기 때문에 충돌이 발생할 수 있다.

실습 시 오류 사항

git checkout FETCH_HEAD 명령어 사용 시 아래와 같이 오류가 발생하였다.

$ git checkout FETCH_HEAD
error: pathspec 'FETCH_HEAD' did not match any file(s) known to git

해당 에러는 로컬 저장소의 git과 리모트 저장소의 git 정보가 동기화 되지 않아서, 새로 만들어진 리모트 저장소 브랜치를 참조할 수 없기에 발생하는 에러다.
그러므로 아래 명령어로 원격 브랜치를 업데이트 한 뒤 checkout을 실행하면 잘 동작한다!

git remote update
git checkout 브랜치명

나는 git checkout main 명령어 사용 후 checkout 하였더니 해결되었다. 여길 참고해서 해결했다.

풀 리퀘스트 (Pull Request)

일반적으로 내가 소유하지 않은 원격 저장소에 푸시할 수 있을까?
일반적으로는 NO!
collaborator - add peolpe 추가하면 가능은 함 (push자격을 주고 싶은 계정을 추가하여 권한을 줌, 일반적으로 사용하는 기능은 아님)
push권한은 최소로 하는 것이 좋음

pull request 란?

원격 저장소가 내 변경사항을 pull하도록 owner에게 요청(request)을 보내는 방식
owner가 요청을 검토해보고 승낙/거부

  1. 기여하려는 저장소를 본인 계정으로 포크(fork)하기
  2. 포크한 저장소를 클론하기
    git clone 클론붙여넣기 - cd <폴더이름>
  3. 브랜치 생성 후 생성한 브랜치에서 작업하기 (커밋까지)
    git branch work - git checkout work - vi index.html - <li>leemiyeon</l> - git add index.html - git commit -m "work done"
  4. 작업한 브랜치 푸시하기 (fork된 저장소에 푸시됨)
    git push origin work
  5. 풀 리퀘스트 보내기
profile
내가 보려고 기록하는 블로그

0개의 댓글