[Study] CLI란? (명령어 정리)

productuidev·2022년 1월 15일
0

FE Study

목록 보기
23/67
post-thumbnail
post-custom-banner

CLI

Command Line Interface

운영체제에서는 기본적으로 CLI 제공

  • 윈도우 : 명령 프롬프트(CMD)
  • 맥, 리눅스 : Terminal

node.js를 활용하기 위해서는 명령어 기반 인터페이스

  • CMD 도구를 대체할 수 있는 CLI로는 마이크로소프트사에서 개발한 확장 가능한 명령어 기반 인터페이스로 PowerShell이 있다.
  • Git 전용 CLI 도구인 Git Bash가 있는데, 이는 Git을 설치해야만 사용가능하며, CMD와 PowerShell 에서 지원하지 않는 리눅스 명령어도 사용할 수 있다는 장점이 있다.
  • 지금부터 사용하는 CLI 명령어는 Git Bash 를 통해 입력한 명령어이므로 CMD, PowerShell 사용시 주의를 요합니다.

출처
https://webclub.tistory.com/120?category=546348 [Web Club]
https://gocoder.tistory.com/1629
https://gocoder.tistory.com/1629 [고코더 IT Express]


☑️ git 워킹 트리(working tree)

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

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"이라는 숨김 폴더가 생성되는데 이 폴더가 로컬 저장소

📌 create a new repository on the command line

💻 git init
💻 git add file
💻 git commit -m commit message
💻 git branch -M main
💻 git remote add origin repository URL
💻 git push -u origin main

📌 push an existing repository from the command line

💻 git remote add origin repository URL
💻 git branch -M main
💻 git push -u origin main

📌 git config

옵션 설정하는 명령어

💻 git config --global core.autocrlf input

macOS 개행문자(Newline) 설정

💻 git config --global core.autocrlf true

Windows 개행문자(Newline) 설정

💻 git config --global user.name '(git ID)'

💻 git config --global user.email '(git에 등록한 email)'

사용자정보, 커밋(버전생성)을 위한 정보 등록

💻 git config --global --list

Q키를 눌러서 종료 or 구성확인

💻 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 옵션

💻 git log --oneline

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

💻 git log --graph

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

💻 git log --decorate

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

💻 git log --all

all 옵션이 없을 경우 HEAD와 관계없는 옵션은 보여주지 않음

💻 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 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를 업로드

출처: https://jaimemin.tistory.com/1542

profile
필요한 내용을 공부하고 저장합니다.
post-custom-banner

0개의 댓글