Git 명령어 정리

Date:     Updated:

카테고리:

태그:

인프런에 있는 얄코님의 제대로 파는 Git & GitHub 강의를 듣고 정리한 내용입니다.


🐕 Git 기본

# 해당 폴더 git 관리 시작
git init

# 변경사항 확인
git status

# 파일 담기
git add .

# commit 하기
git commit -m "commit message"

# add & commit 동시에 가능
git commit -am "commit message"

# commit 작동 확인
git log


🐕 Commit 다루기

commit 되돌리기

  • reset : 원하는 시점으로 돌아간 뒤 이후 내역들 지움
    • –soft : repo에서 staging으로 이동 (add한 상태)
    • –mixed(default) : repo에서 working dir로 이동 (add하기 전 상태) – hard : 수정사항 완전히 삭제
  • revert : 특정 커밋을 거꾸로 실행
# 원하는 시점의 commit 해시 찾기
git log

# reset (해시 없을 경우 마지막 커밋)
git reset --hard (돌아갈 커밋 해시)

# revert
git revert (되돌릴 커밋 해시)

git revert --no-commit (되돌릴 커밋 해시) # 커밋 하지 않고 stage에만 변경


현재 속한 브랜치의 가장 최신 커밋

# checkout으로 앞뒤 이동
git checkout HEAD^(or HEAD~) # 뒤로 한 칸
git checkout HEAD^3(or HEAD~3) # 뒤로 세 칸
git checkout - # 한 단계 되돌리기

git checkout (커밋 해시) # 특정 시점으로 이동

# HEAD를 이용한 reset
git reset --option HEAD^


Commit 수정하기

# 커밋 메시지 변경
git commit --amend

git commit --amend -m "commit message"
  • 커밋에 변화 추가
    • 변경 후 add
    • ammend로 메시지 아무렇게 변경 (재커밋)
    • 커밋 메시지 복구


Commit 심화

# hunk별 스테이징 하기 (?로 옵션 설명 확인)
git add -p

# 스태이징한 내용들 working dir로 되돌리기
git restore 

# 변경사항 확인 후 커밋
git commit -v


과거 Commit들 수정/병합/분할/삭제

# 원하는 커밋의 이전 커밋 해시 입력
git rebase -i (커밋 해시)
  • p (pick) : 커밋 그대로 두기
  • r (reword) : 커밋 메시지 변경
  • e (edit) : 수정을 위해 정지
  • d (drop) : 커밋 삭제
  • s (squash) : 이전 커밋과 병합


커밋하기 전 잠깐 치워두기

# 잠시 치워두기
git stash

# 원하는 브랜치, 시점에서 다시 적용
git stash pop

# hunk별 stash
git stash -p

# 메시지와 함께 stash
git stash -m "message"

# stash 목록 조회
git stash list
  • git stash apply : 치워둔 항목 적용 (default = 가장 마지막 항목)
  • git stash drop : 치워둔 항목 삭제 (default = 가장 마지막 항목)
  • git stash pop : apply + drop
  • git stash branch (branch 이름) : 새 브랜치를 생성하여 pop
  • git stash clear : 치워둔 모든 항목들 비우기


🐕 Branch 다루기

생성 / 이동 / 삭제

# 브랜치 생성
git branch branch-name

# 브랜치 목록 확인
git branch

# 브랜치 이동
git switch branch-name

# 생성과 동시에 이동
git switch -c branch-name

# 브랜치 삭제
git branch -d branch-name

# 브랜치 강제 삭제
# 해당 브랜치에 commit 이력이 있으나 원격 저장소에 push or merge되지 않은 경우 -d로 삭제 불가능
git branch -D branch-name

# 브랜치 이름 변경
git branch -m (old name) (new name)


브랜치 합치기

  • merge : 두 브랜치를 하나의 커밋으로 합치기
    • merge는 reset으로 되돌리기 가능
  • rebase : 브랜치를 다른 브랜치에 이어붙이기
# sample 브랜치를 main 브랜치로 merge
git switch main # main 브랜치로 이동
git merge sample # merge
git branch -d sample # 병합된 브랜치 삭제


# sample 브랜치를 main 브랜치로 rebase
git switch sample # sample 브랜치로 이동
git rebase main # rebase
git switch main # main 브랜치로 이동
git merge sample # 뒷쳐져 있는 main 브랜치 fast-forward
git branch -d sample # 병합된 브랜치 삭제


충돌 해결

# merge 충돌
git status # 충돌 부분 확인 후 수정
git add .
git commit

# merge 충돌
git status
git add .
git rebase --continue # 다음 커밋의 충돌 해결

# 당장 해결이 어려운 경우 병합 중단
git merge(rebase) --abort


브랜치 심화

# 다른 브랜치에서 원하는 커밋만 따오기
git cherry-pick (가져올 커밋 해시) 

# 다른 브랜치의 잔가지만 가져오기
git rebase --onto (도착 브랜치) (출발 브랜치) (이동할 브랜치)
ex) git rebase --onto main food fruit # food 브랜치에서 파생된 fruit 브랜치를 main으로 옮겨붙이기

# 브랜치를 합치지 않고 가져오기
git merge --squash (대상 브랜치) # 대상 브랜치를 복사해서 merge (연결x)


🐕 Github 연결하기

원격 저장소 연결

# 로컬에 원격 저장소 연결하기
git remote add origin (원격 저장소 주소) # 보통 origin 사용

# 로컬 저장소의 커밋들을 원격으로 push (u: 세팅)
git push -u origin main

# 원격 목록 보기
git remote

# 연결 끊기
git remote remove origin

# Github 프로젝트 다운받기
git clone (원격 저장소 주소)


Fetch vs Pull

  • pull : 원격의 커밋을 로컬로 가져와 merge 또는 rebase
  • fetch : 원격의 커밋을 로컬로 가져오기만 함
    • 적용 전에 checkout / switch 로 살펴보기
    • 확인 후 merge 또는 rebase
git pull --no-rebase
git pull --rebase

# git pull 세팅
git config pull.rebase true/false

git fetch
git push


원격 브랜치 다루기

# 원격 브랜치 확인
git branch -r

# 로컬 & 원격 브랜치 확인
git branch -a

# 로컬의 새로운 브랜치를 원격에 push 하기
git push -u origin new-branch

# 원격의 브랜치 로컬로 가져오기
git fetch
git branch -a # 가져올 브랜치 이름 확인
git switch -t origin/branch-name # 로컬에 같은 이름의 브랜치 생성하여 연결 & switch로 브랜치 이동

# 원격 브랜치 삭제
git push origin --delete (원격 브랜치)


커밋에 태그 달기

# 태그 목록 조회
git tag

# 태그 목록 필터링 조회
git tag -l 'v2.*'

# 마지막 커밋에 태그 달기
git tag v2.0.0

# 특정 커밋에 태그 달기
git tag v2.0.0 (커밋 해시)

# 태그 내용 확인
git show v2.0.0

# 태그 삭제
git tag -d v2.0.0

# 태그에 annotated 추가 (메시지, 작성자, 날짜 등..)
git tag -a v2.0.0

# message만 추가
git tag v2.0.0 -m "tag message"


# 태그 원격에 올리기
git push (원격 이름) (태그 이름)

# 특정 태그 원격에서 삭제
git push --delete (원격 이름) (태그 이름)

# 로컬의 모든 태그 원격에 올리기
git push --tags


🐕 디버깅

log 심화

# 커밋마다 변경사항 함께 보기
git log -p

# 최근 5개의 커밋 보기
git log -5

# 통계와 함께 보기
git log --stat

# 한 줄로 보기
git log --oneline

# 변경사항 중 단어 검색
git log -S (word)

# 커밋 메시지로 검색
git log --grep (word)


Git diff

# working dir의 변경사항 확인
git diff

# 파일명만 확인
git diff --name-only

# 스테이징한 내용들 확인 (add한 내용들)
git diff --staged

# 커밋간 차이 확인
git diff (커밋1) (커밋2)

# 브랜치간 차이 확인
git diff (브랜치1) (브랜치2)


🐕 .gitignore 형식

# 이렇게 #를 사용해서 주석

# 모든 file.c
file.c

# 최상위 폴더의 file.c
/file.c

# 모든 .c 확장자 파일
*.c

# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

# logs란 이름의 파일 또는 폴더와 그 내용들
logs

# logs란 이름의 폴더와 그 내용들
logs/

# logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c

# logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
logs/**/debug.log



맨 위로 이동하기

Git-Linux 카테고리 내 다른 글 보러가기

첫 번째 글입니다 가장 최근 글입니다

댓글 남기기