[Git 기초] Git Bash 기본 명령어 모음

DEV/Git

[Git 기초] Git Bash 기본 명령어 모음

Bi3a 2023. 10. 18. 15:54

반응형

git bash 기본 명령어 정리
git bash 기본 명령어에 대해 알아봅시다.

 

git의 흐름
Git의 흐름과 구조

 

Git Bash

Git Bash는, Windows 환경에서 Git을 사용하기 위한 Bash Shell 환경을 제공하는 툴입니다.

 

Git Bash는 아래와 같은 특징이 있습니다.

  • Linux와 유사한 명령 체계
    • 기초적인 유닉스 명령어를 지원합니다. (ls, cp, mv, grep, awk, sed, cat, rm, mkdir, find 등)
  • git 자체의 유틸리티도 포함
    • git, ssh, curl, tar, gzip, less, nano, vim 등
  • 파이프, 리다이렉션, 변수 선언 등 Bash 스크립트 문법을 포함

 

Git 용어 정리

  • 구성요소
    • 워크스페이스(workspace) : 작업폴더
    • 인덱스(Index) : Git의 장바구니 개념(add으로 추가, unstage로 삭제)
    • 로컬 리포지토리(local repository): 로컬 저장소(git init을 통해 등재된 작업폴더 내부의. git 폴더)
    • 원격 리포지토리(remote repository) : 원격 저장소(github의 리포지토리 주소, .git으로 끝납니다) 
  • 명령어
    • 추가(add) : 작업폴더에 있는 파일을 인덱스에 저장 (작업폴더 → 인덱스)
    • 언스테이지(unstage) : Git의 인덱스에 담겨 있는 파일을 제거
    • 커밋(commit) :  Git의 인덱스에 담겨 있는 파일을 로컬 리포지토리에 저장 (인덱스 → 로컬 리포지토리)
    • 체크아웃(checkout) : Git의 커밋된 타임라인과 해당 내용으로 돌아가는 것
    • 푸쉬(push) : Git의 로컬 리포지토리의 파일을 연결된 원격 리포지토리에 저장 (로컬 → 원격 리포지토리)
    • 풀(pull) : Git의 원격 리포지토리의 파일을 연결된 로컬 리포지토리에 저장 (원격 → 로컬 리포지토리) 

 

Git Bash 명령어

디렉터리 이동 관련

  • `clear` : Git bash 창 초기화
  • `ls` : 디렉터리에 있는 파일 조회
  • `ls -a` : 디렉토리에 있는 파일(숨김폴더 포함) 조회
  • `ls -al` : 디렉토리에 있는 파일 + 수정 이력까지 조회 
  • `cd "디렉토리명"` : 해당 디렉터리로 이동
  • `cd..` : 상위 디렉터리로 이동
  • `pwd` : 현재 디렉토리 위치 확인

 

로컬 저장소 및 브랜치 지정 관련

  • `git init` : 현 디렉터리를 로컬 저장소(리포지토리)로 생성합니다.(. git 파일 생성)
  • `rm -rf. git` : 현 디렉터리를 로컬 저장소(리포지토리)에서 해제합니다.(. git 파일을 삭제)
  • `git branch` : 현 디렉터리에 연결되어 있는 브랜치를 확인합니다. (연결되어 있지 않으면 출력되지 않음)
  • `git checkout -b "브랜치명"` :  브랜치명의 브랜치를 생성합니다.
  • `git checkout "브랜치명"` : 해당 브랜치명의 최신 커밋버전으로 전환합니다.
  • `git branch -d "브랜치명"` : 해당 브랜치명의 브랜치를 삭제합니다.
    • 브랜치 삭제를 위해서는 사전에 타 브랜치명의 브랜치로 전환이 요구됨
  • `git config --global init.defaultBranch` : 현 PC의 디폴트 브랜치를 확인합니다.
  • `git config --global init.defaultBranch "브랜치명"` : 현 PC의 디폴트 브랜치를 지정 브랜치명으로 변경합니다.
    • 기존에 생성되어 있었던 리포지토리의 브랜치는 변경되지 않으니 유의

 

디렉터리 내 파일 및 디렉토리 생성 관련

  • `touch "파일. 확장자명"` : 현재 디렉터리에 있는 해당 명의 파일을 생성합니다.
  • `mkdir "디렉토리명"` : 현재 디렉터리에 있는 해당 명의 디렉토리를 생성합니다.
  • `rm -rf "파일명` : 현재 디렉토리에 있는 해당 명의 파일을 삭제합니다.
  • `rm -rf *` : 현재 디렉토리에 있는 모든 파일을 삭제합니다.
    • `*`: 와일드카드, 경로 내의 모든 파일을 뜻합니다.

 

로컬 워크스페이스 ~ 로컬 리포지토리 간 작업 관련

  • `git status` : Git의 로컬 저장소(. git)의 최근 상태와, 작업 폴더의 상태의 차이를 조회합니다.
  • `git add "파일명"` : 해당 파일을 Git의 인덱스에 추가합니다.
  • `git add.` : 해당 경로에 있는 모든 파일을 Git의 인덱스에 추가합니다.
  • `git rm --cached "파일명"` : 해당 파일을 Git의 인덱스에서 제거(unstage) 합니다.
  • `git reset` : Git의 인덱스에 있는 모든 파일을 제거(unstage) 합니다.
  • `git log` : 커밋 이력 열람(작성자와 커밋 일자)
  • `git log --oneline` : 커밋 이력을 간략하게 조회합니다.
  • `git commit` : 인덱스에 있는 파일을 커밋 (vim으로 화면 넘어감)
  • `git commit -m "text"` : 인덱스에 있는 파일을 커밋 (vim이 아닌 간략하게 텍스트를 기재해 커밋할 때 사용)
  • `git checkout "로그명"` : 해당 로그명이 커밋된 파일 버전으로 돌아갑니다.
  • `git checkout "브랜치명"` : 가장 최근에 커밋된 해당 브랜치명의 최신 버전으로 다시 돌아갑니다.  
    • 디렉터리에서 커밋되지 않은 변경사항이 있을 때는 돌아갈 수 없습니다.
  • `git reset --soft "로그명"` : 해당 로그 파일 버전으로 돌아갑니다. 커밋 이력과 인덱스는 남아있습니다.
  • `git reset --hard "로그명"` : 해당 파일 파일 버전으로 돌아갑니다. 커밋 이력과 인덱스는 전부 삭제됩니다.

 

로컬 리포지토리 ~ 원격 리포지토리 간 작업 관련

  • `git remote -v` : 현재 연결되어 있는 원격 리포지토리 목록을 조회합니다.
  • `git remote add "별명" "원격 리포지토리 주소"` : 해당 주소를 현재. git의 원격 리포지토리로 등록합니다.
    • 한 개의. git 파일에 여러 개의 원격 리포지토리 등록이 가능합니다.
    • 로컬 리포지토리와 가장 많이 연관되는 원격 리포지토리는 `origin` 으로 통칭됩니다.
    • ex) `git remote add origin "https://github.com/Bisi3asi/DemoRepository.git"`
  • `git push "원격 리포지토리명" "브랜치명"` : 현재 로컬 저장소의 브랜치를 해당 원격 리포지토리로 업로드합니다.
    • 해당 원격 저장소에도 동일한 브랜치가 생성됩니다. 
    • ex) `git push origin main` : 현재 로컬 저장소 main 브랜치를 origin 원격 리포지토리로 업로드합니다.
  • `git pull "원격 리포지토리명" "브랜치명"` : 원격 리포지토리로 등록된 origin에 있는 main 브랜치 내용을 현재 로컬 리포지토리의 메인 브랜치로 다운로드합니다.
    • `git pull "원격 리포지토리명" "브랜치명 --allow -unrelated-histories"` : 신규로 만든 로컬 리포지토리를 기존에 있는 원격 리포지토리와 연결할 때 사용합니다. 
      • 신규 프로젝트는 기존 프로젝트와 공통적으로 같은 조상을 보고 있지 않아 다른 프로젝트로 인식하기 때문,
      • 따라서 병합을 위해 --allow -unrelated-histories 를 사용합니다.
  • `git clone "원격 저장소 주소".` : 현재 디렉터리를 로컬 저장소로 만들고 해당 원격 저장소와 연결시키며, 원격 저장소에 있는 모든 내용을 현재 지정한 디렉터리에서 만든 로컬 저장소로 복사해 옵니다.
    • `git clone == git init + git remote add origin + git pull origin main`
  • `git config --global user.name` : 현재 PC의 사용자 이름 확인(깃허브 연동 ID)
  • `git config --global user.name "ID"` : 현재 PC의 사용자 이름 추가(깃허브 연동 ID)
  • `git config --global user.email` : 현재 PC의 사용자 이메일 확인(깃허브 연동 이메일)
  • `git config --global user.email "USER_EMAIL"` : 현재 PC의 사용자 이메일 추가(깃허브 연동 이메일)

 

시나리오 1 : 다른 PC에서 기존 원격저장소 → 로컬 저장소 생성 세팅

# 1. 사용자 이름, 이메일 설정
git config --global user.name "USER.NAME"
git config --global user.email "USER.EMAIL"

# 2. 작업 디렉토리 설정
mkdir my_project
cd my_project

# 3. 기존 원격 저장소 복제
git clone "GITHUB.REPOSITORY.URL"

# 4. (선택) 업데이트 내용 pull
git pull

# 5. (선택) 로컬 브랜치 변경
git checkout -b "BRANCH.NAME"

# 6. (선택) 기존 브랜치 전환
git checkout "ORIGINBRANCH.NAME"

# 7. (선택) 원격 저장소 연결 확인
git remote -v

 

시나리오 2 : 로컬 파일 수정 / 추가 후 원격저장소에 저장

# 1. 현재 로컬 리포지토리 상태 확인
## 빨간색 음영표시된 내용 : 인덱스에 담겨있지 않은 변경 / 추가사항 (add 가능)
## 초록색 음영표시된 내용 : 인덱스에 담겨있는 변경 / 추가사항 (커밋 가능)
git status

# 2. 변경사항 인덱스에 추가
git add

# 2-1. 인덱스 및 가장 최근 커밋된 버전으로 로컬 리포지토리 초기화 (필요시)
git reset

# 3. 커밋 및 커밋 메시지 작성
## 커밋 메시지의 경우 변경 사항에 대해 작성
git commit -m "커밋 메시지"

# 4. 로컬 리포지토리 변경사항 원격 리포지토리에 저장
git push "원격 리포지토리 별칭" "원격 리포지토리 브랜치명"
## ex) git push origin master

 

Git Bash 기본 단축키 (Bash 기본 단축키)

  • `Ctrl + Insert` : 복사
  • `Shift + Insert` : 붙여 넣기
  • `Ctrl + C` : vim, 서버 구동 등의 화면에서 콘솔 입력 창으로 복귀
  • `Ctrl + L` : 화면 clear, 화면 초기화
  • `Tab` : 자동 완성 및 자동 완성 목록 표출
  • `Ctrl + Z` : 현재 작업중인 프로세스를 백그라운드로 보냄 (이후 fg 명령어로 복귀)
  • `Ctrl + D` : exit과 동일, 셸 종료

 

유의사항

  • 기본적으로 빈 폴더는 Git에서 취급하지 않습니다. add도 올라가지 않습니다. (Git의 정책으로 인해)
    • 단, . gitkeep 파일 설정을 통해 폴더명을 추가할 시 빈 폴더 또한 Git에 추가가 가능합니다.
    • .gitkeep 파일은 빈 디렉터리를 유지함으로써 프로젝트의 구조를 명확하게 할 수 있습니다.
  • . gitignore에 특정 파일명을 추가함으로써 파일의 내용이 변경되어도 git의 인덱스에 추가되는 것을 방지할 수 있습니다.
    • 개인 환경마다 설정이 변경되어야 하는 파일, 프로젝트와 관계없는 파일 등 목적에 맞게 설정이 가능합니다.
반응형