Git 명령어 정리
카테고리: Git-Linux
태그: Git
인프런에 있는 얄코님의 제대로 파는 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에만 변경
HEAD
현재 속한 브랜치의 가장 최신 커밋
# 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
댓글 남기기