저장소 : Remote Repository, Local Repository

Git의 원격 저장소와 로컬 저장소

  • Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공합니다.
    • 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다.
    • 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소입니다.

fork, upstream, origin, master

fork란??

  • 아래 스샷 Larry/Recipes라는 레포지토리를 내 계정에 가져옴(fork)
    • fork를 하는 이유 :

upstream이란??

  • 가장 근본이 되는 레포를 upstream 이라고 부릅니다. = fork당한 repository
  • 내계정으로 fork해서 가져오게되면, fork로 인해 내계정에 생성된 레포를 origin이라고 부릅니다.
  • 따라서, 위 fork에서 언급한 Larry/Recipesupstream이고, Myaccount/Recipesorigin이 된다.

origin이란??

  • origin은 원격 저장소의 이름을 뜻함.
  • 원격저장소 시간때 원격저장소 추가 명령어는 git remote add [이름] [url] 형식으로 사용
  • 보통 git remote add origin [원격저장소url] 형식으로 원격저장소를 추가하기 때문에 origin[원격저장소url]에 해당하는 레포지토리를 의미함
  • git clone [원격저장소url]을 통해 원격저장소를 복사한다면 자동으로 origin이라는 이름으로 [원격저장소url]주소가 원격저장소로 등록되게된다

master(=main)란?

  • repository에서 기본(default) branch를 master(=main) branch 라고 명명함
  • (참고) 2020년 6월 Go 언어가 인종차별적 요소나 주종 관계의 의미를 담고 있는 whitelist/blacklistmaster/slave라는 용어를 프로젝트에서 제거하기로 결정하면서 업계 전반에 이런 부분을 제거하는 움직임이 일어났다.
    master/slave 같은 차별적인 용어 대신에 main이라는 용어를 사용하게 바뀜. 따라서 기존에 default branch 명이 master => main 으로 변경됨
  • default branch main에서 master로 바꾸는 방법 정리한 글 : 링크

기본 CLI

  • git push --set-upstream origin master
    • 명령어에 내용은 다음과 같다. 원격 저장소에 업로드(push)를 진행 할 것인데, 기본 브랜치로 (origin) 저장소의 (master) 브랜치로 설정(--set-upstream)한다.(링크)

branch 관련

  • local에서 branch를 생성할 때 : git branch [branch이름]
  • remote에 있는 branch와 동일한 이름을 지닌 branch를 local에다가 만들어주기 : git switch --track origin/[branch이름]
  • local에서 branch를 왔다갔다 할 때(=변경 할 때) : git switch [branch이름], git checkout [branch이름]
  • 현재 branch에서 remote branch로 push 하기 : (현재branch에서 작업한 후) => git push origin [remote에서branch이름]
  • git branch -r : remote branch 목록을 보여줌
    • 만약 git branch -r했는데 remote branch 목록이 안보이거나, 최신 상태로 업데이트 되지 않았을 경우
    • git fetch --all --prune 혹은 git remote prune origin를 입력해서 최신 상태로 업데이트 시켜준다
  • git branch : local branch 목록을 보여줌
  • Local Branch 삭제 : git branch -d [로컬branch_name]
  • Remote Branch 삭제
    • git push origin --delete [리모트branch_name]
    • git push origin :[리모트branch_name]

local에서 commit 되돌리기

(정리)

  • 나 혼자 작업하는 브랜치에서는 git reset을 사용해도 문제 없다.
  • 다른 사람과 공유하는 브랜치에서 커밋 내역을 수정해야할 경우 git revert를 사용하자.

git reset

  • 아래 내용들 참고 자료 : 링크
  • git reset을 사용하는데 3가지 option인 --hard, --soft, --mixed 옵션이 존재함
    • --soft
      • git reset --soft를 사용하여도 local에서 작업했던 폴더(Working directory)에는 아무런 변화가 없음 & 작업했던 파일을 살펴보아도 아무런 변화가없음
      • 즉, reset하기 전 상황으로 다시 만들기 위해서는 commit만 하면됨
      • --soft 옵션은 이전상태로 되돌려도 가장 변화가 적은 옵션(되돌려봤자 commit만 안한상태, 코드는 수정된 상태로 있고 & add도 된 상태
      • 따라서, 커밋 메세지만 수정할 때 사용할 것 같다
    • --mixed (default)
      • --soft와 마찬가지로, git reset --mixed를 사용하여도 local에서 작업했던 폴더(Working directory)에는 아무런 변화가 없음 & 작업했던 파일을 살펴보아도 아무런 변화가없음
      • 잘못 입력한 코드들은 살아있고 add는 안되어있는 상태.
      • 따라서, 잘못 입력한 코드들을 수정하고 add하고 commit하면 됨
    • --hard
      • git reset --hard를 사용하면 local에서 작업했던 폴더(Working directory) 및 & 작업했던 파일의 코드들이 이전상태로 변경되어있음
      • 즉, 이전 상태에서 add 및 commit까지 완료한 상태
      • 이전 상태에서 작업을 완전히 새롭게 다시 시작한다고 생각하면 됨
  • 방식 1 : git reset [option] [commitID]
  • 방식 2 : git reset [option] HEAD~[숫자]
    - git reset --hard HEAD~6 : hard방식으로 현재 상태에서 6시점 전 상태로 되돌려라 라는 의미

git revert

  • 이전 커밋 내역을 그대로 남겨둔 채 새로운 커밋을 생성한다.
  • `git revert [commitID]
# git revert 예시
> git revert 5lk4er  # D 커밋 revert
> git revert 76sdeb  # C 커밋 revert

git log와 git reflog

  • 참고 : 링크
  • git log 명령어를 상용하면 현재 브랜치의 로그만 확인할 수 있다.
    • git log --oneline : 커밋 이력 중 커밋 ID 와 타이틀 메시지만 조회
    • 기타 git log 옵션 : 링크
  • 반면, git reflog라는 명령어를 사용하면 현재 저장소에서 수행된 모든 commit 로그를 확인할 수 있다. 따라서 특정 commit 시점의 해시를 찾을 때는 git reflog 명령어를 사용하는 것이 편리하다.

References

profile
oneofakindscene

0개의 댓글