[DEV] 기록

[git] CLI 명령어 정리

꾸준함. 2021. 1. 31. 18:36

git 용어 정리

워킹 트리(working tree)

  • 워킹 트리, 워킹 디렉토리, 작업 디렉토리, 작업 폴더 모두 같은 뜻
  • 사용자가 파일과 하위 폴더를 만들고 작업 결과물을 저장하는 곳
  • 공식문서에서는 'commit을 체크아웃하면 생성되는 파일과 디렉토리'로 정의
  • 작업 폴더에서 ".git" 폴더를 제외한 나머지 부분이 워킹 트리

 

로컬 저장소(local repository)

  • git init 명령으로 생성되는 ". git" 폴더
  • 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장

 

원격 저장소(remote repository)

  • 로컬 저장소를 업로드하는 곳
  • GitHub, GitLab과 같은 저장소가 원격 저장소

 

작업 폴더

  • 워킹 트리 + 로컬 저장소

 

Staging Area

  • 해당 내용은 링크를 참고해주시면 감사하겠습니다.

 

Head

  • 다른 버전 관리 시스템과는 달리 Git은 'HEAD’라는 특수한 포인터가 있습니다.
  • 이 포인터는 지금 작업하는 local branch를 가리킵니다.

 

 

git CLI 명령어 정리

* <>와 같이 부등호가 있는 인자는 필수 인자이고 []와 같이 대괄호 사이에 있는 인자는 옵션 인자입니다.

 

git status

  • git 워킹 트리의 상태를 보는 명령
  • 워킹 트리가 아닌 폴더에서 실행하면 에러 발생

 

git status -s

  • git status와 유사하나 워킹 트리의 상태를 요약해서 보여주는 명령
  • 변경된 파일이 많을 때 유용

 

git init

  • 현재 폴더에 git 저장소 생성
  • 현재 폴더에는 ". git"이라는 숨김 폴더가 생성되는데 이 폴더가 로컬 저장소

 

git config

  • 옵션 설정하는 명령어
명령어 설명
git config --global <옵션명> 지정한 전역 옵션의 내용 조회
git config --global <옵션명> <새로운 값> 지정한 전역 옵션의 값을 새로 설정
git config --global --unset <옵션명> 지정한 전역 옵션 삭제
git config --local <옵션명> 지정한 지역 옵션의 내용 조회
git config --local <옵션명> <새로운 값> 지정한 지역 옵션의 값을 새로 설정
git config --local --unset <옵션명> 지정한 지역 옵션의 값 삭제
git config --system <옵션명> 지정한 시스템 옵션의 내용 조회
git config --system <옵션명> <값> 지정한 시스템 옵션의 값 새로 설정
git config --system --unset <옵션명> <값> 지정한 시스템 옵션의 값 삭제
git config --list 현재 프로젝트의 모든 옵션 조회

 

git add 파일 1 파일 2...

  • 파일들을 stage에 추가
  • 새로 생성한 파일을 stage에 추가하고 싶다면 반드시 add 명령 사용

 

git commit

  • stage에 있는 파일들을 commit

 

git commit -a

  • add 명령을 생략하고 바로 commit
  • 변경된 파일과 삭제된 파일은 자동으로 staging 되고 commit
  • untracked 파일은 커밋되지 않음

 

git push [-u] [원격 저장소명] [브랜치명]

  • 현재 branch에서 새로 생성한 commit들을 원격 저장소에 업로드
  • -u 옵션을 통해 브랜치의 upstream을 등록 가능
    • 한 번 등록한 후에는 git push만 입력해도 됨

 

git pull

  • 원격 저장소의 변경사항을 워킹 트리에 반영
  • git pull = git fetch + git merge

 

git fetch [원격 저장소명] [브랜치명]

  • 원격 저장소의 branch와 commit들을 로컬 저장소와 동기화
  • 옵션을 생략하면 모든 원격 저장소에서 모든 브랜치를 가지고 옴

 

git merge 브랜치명

  • 지정한 branch의 commit들을 현재 branch 및 워킹 트리에 반영

 

git reset [파일명]...

  • staging area에 있는 파일들을 stage에서 내립니다. (unstaging)
  • 워킹 트리의 내용은 변경 X
  • 옵션을 생략할 경우 stage의 모든 변경사항 초기화
    • reset에는 세 가지 옵션이 존재 (soft, mixed, hard)

 

git log

  • 현재 branch의 commit 이력을 보는 명령어

 

git log -n<숫자>

  • 전체 commit 중에서 최신 n개의 commit만 조회
  • 다양한 옵션 조합해서 사용 가능

 

git log --oneline --graph --decorate --all

  • git log 옵션

 

  • --oneline
    • commit 메시지를 한 줄로 요약해서 조회
    • 생략 시 commit 정보를 자세히 표시

 

  • --graph
    • commit 옆에 branch의 흐름을 그래프로 보여줌
    • GUI와 비슷한 모습으로 나옴

 

  • --decorate
    • --decoreate=short 옵션을 의미
    • branch와 tag 등의 참조를 간결히 표시

 

  • --all
    • all 옵션이 없을 경우 HEAD와 관계없는 옵션은 보여주지 않음
git log 명령어 예시 설명
git log HEAD와 관련된 commit들이 자세하게 나옴
git log --oneline 간단히 commit 해시와 제목만 보고 싶을 때
git log --oneline --graph --decorate HEAD와 관련된 commit들을 조금 더 자세히 보고 싶을 때 
git log --oneline --graph --all --decorate 모든 branch들을 보고 싶을 때 사용하는 명령어
git log --oneline -n7 내 branch의 최신 commit을 7개만 보고 싶을 때 사용

간단한 git log 예시

 

 

git help <명령어>

  • 해당 명령어의 도움말을 표시
  • 도움말에는 명령의 의미와 세부적인 옵션들을 매우 자세하게 표시

 

git remote add <원격 저장소명> <원격 저장소 주소>

  • 원격 저장소 등록
  • 원격 저장소는 여러 개 등록 가능하지만 같은 alias의 원격 저장소는 하나만 가질 수 있음
    • 통상 첫 번째 원격 저장소를 origin으로 지정

 

git remote -v

  • 원격저장소 목록 조회

 

git clone <저장소 주소> [새로운 폴더명]

  • 저장소 주소에서 프로젝트를 복제해 오는 명령어
  • 새로 생길 폴더명은 생략 가능하며 폴더명을 생략하면 프로젝트 이름과 같은 이름의 폴더가 새로 생성
  • 저장소 주소는 꼭 원격일 필요가 없으며 로컬 저장소도 git clone 명령으로 복제 가능

 

git branch [-v]

  • 로컬 저장소의 branch 목록을 보는 명령으로 -v 옵션을 사용하면 마지막 commit도 함께 표시
  • 표시된 branch 중에서 이름 왼쪽에 * 가 붙어 있으면 HEAD 브랜치

 

git branch [-f] <브랜치명> [커밋 체크섬]

  • 새로운 branch를 생성
  • commit checksum 값을 주지 않으면 HEAD로부터 branch를 생성
  • 이미 있는 branch를 다른 commit으로 옮기고 싶을 때는 -f 옵션을 부여

 

* commit checksum: git log를 찍었을 때 commit을 가리키는 문자열 (git log 사진에서 db6ec55와 같은 문자열이 체크섬)

 

git branch -r[v]

  • 원격 저장소에 있는 branch를 조회하고 싶을 때 사용
  • 마찬가지로 -v 옵션을 추가하여 commit 요약 확인 가능

 

git checkout <브랜치명>

  • 특정 branch로 checkout 할 때 사용
  • branch명 대신 commit checksum을 쓸 수도 있음
  • 하지만 branch명을 쓰는 방법을 강력히 권장

 

git checkout -b <브랜치명> <커밋 체크섬>

  • 특정 commit에서 branch를 새로 생성하고 동시에 checkout
  • 두 명령을 하나로 합친 명령

 

git merge <대상 브랜치>

  • 현재 branch와 대상 branch를 병합할 때 사용
  • merge commit이 새로 생기는 경우가 많음

 

git rebase <대상 브랜치>

  • 내 branch의 commit들을 대상 branch에 재배치
  • 히스토리가 깔끔해져서 자주 사용하지만 원격 저장소에서는 사용 안 하는 것을 권장
    • 예를 들자면 a 커밋을 원격 저장소에 push 하고 rebase를 하게 되면 원격에는 a가 존재하고 로컬에는 다른 커밋인 a`가 생성됩니다. 이때 내가 아닌 다른 개발자가 원격 저장소에 있던 a를 merge할 수 있고 이 때 변경된 a`도 언젠가는 원격 저장소에 push가 될 텐데 그럼 원격 저장소에는 실상 같은 commit이었던 a와 a`가 동시에 존재하게 됩니다. 이 때문에 원격 저장소에서는 rebase를 사용하지 않는 것을 권장합니다.

 

git branch -d <브랜치명>

  • 특정 branch를 삭제할 때 사용
  • HEAD branch나 merge가 되지 않은 branch는 삭제 불가능

 

git branch -D <브랜치명>

  • branch를 강제로 삭제하는 명령
  • -d로 삭제할 수 없는 branch를 지우고 싶을 때 사용
  • 강제성이 있는 만큼 사용 시 주의

 

git reset --hard <이동할 커밋 체크섬>

  • 현재 branch를 지정한 commit으로 이동
  • 작업 폴더 내용도 함께 변형
  • commit checksum 대신 HEAD~, HEAD^ 부여 가능
    • HEAD~<숫자>
      • HEAD~는 HEAD의 부모 commit, HEAD~2는 HEAD의 할아버지 commit
      • HEAD~n은 n 번째 위쪽 조상
    • HEAD^<숫자>
      • HEAD^은 똑같이 부모 commit
      • 반면 HEAD^2는 두 번째 부모 즉, merge commit처럼 부모가 둘 이상인 commit에만 유효

 

git tag -a -m <간단한 메시지> <태그 이름> [브랜치 또는 체크섬]

  • -a로 주석 있는 태그를 생성
  • 메시지와 tag 이름은 필수이며 branch 이름을 생략하면 HEAD에 tag 생성

 

git push <원격 저장소명> <태그 이름>

  • 원격 저장소에 tag를 업로드

 

[출처]

팀 개발을 위한 Git GitHub 시작하기 [한빛미디어]

 

git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

Git - 브랜치란 무엇인가

3.1 Git 브랜치 - 브랜치란 무엇인가 모든 버전 관리 시스템은 브랜치를 지원한다. 개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다. 코드를 통째로 복사하고 나서 원래 코드와

git-scm.com

 

반응형