Git 명령어 정리
Git을 항상 사용하지만 기본적인 이해와 활용이 부족한 것 같아 주요 명령어들을 정리해 보았다.
모든 명령어 뒤에 --help 옵션을 사용해 활용 가능한 옵션을 더 알아 볼 수 있다.
Ctrl + F 를 이용해 찾기 기능 사용할 수 있다.
git init
git 초기화를 의미한다.
git status
현재 git 프로젝트에서 파일들의 상태를 보여준다. 현재 브랜치와 커밋 상태, 작업 중인 파일의 상태 등을 확인할 수 있다.
git add
파일의 변경사항을 인덱스index에 추가한다. 스테이징 영역으로 추가된 변경 이력만 commit 할 수 있다.
git add [-A] [<pathspec>..]
# 모든 변경점 추가
git add -A
# Readme.md 파일 추가
git add Readme.md
git commit
인덱스에 추가된 변경 사항을 이력에 추가한다.
git commit [-m <msg>]
# 수정
git commit --amend -m "수정합니다"
git rm
파일을 지우거나 스테이지에서 해제할 때 사용한다.
# 원격, 로컬 저장소 둘 다 삭제
git rm Readme.md
# 원격 저장소만 삭제
git rm --cached Readme.md
git log
commit 목록을 확인할 수 있다. 명령어가 많으니 git log --help 로 확인해서 사용할 수 있다.
git show
commit의 상세정보를 확인한다.
# 현재 브랜치의 가장 최근 커밋 정보를 확인
git show
# 특정 커밋 정보를 확인
git show [커밋해시값]
# HEAD 포인터가 가리키는 커밋정보를 확인
git show HEAD
# ^가 한 개면 한 개전, 두 개면 두 개전의 정보 확인
git show a853f5c^
git show HEAD^^
# ~숫자 를 통해 몇 개 전인지 표기
git show HEAD~4
# ^~혼합사용 (5개 전)
git show HEAD~3^^
git reset
특정 시점의 과거 커밋으로 이동, 이동된 이후의 커밋은 삭제된다. 과거의 커밋으로 이동하면서 그 이후 커밋은 삭제되어 되돌릴 수 없기 때문에 사용시 주의해야한다.
# --mixed (기본값) : commit을 취소하고 해당 파일은 unstaging
git reset --mixed HEAD^
git reset HEAD^
# --soft : commit을 취소하고 해당 파일은 스테이징 영역에 보존
# git status 확인해보면 add된 상태를 확인할 수 있다.
git reset --soft HEAD^
# --hard : Working Directory와 Index영역 모두 초기화
git reset --hard HEAD^
git remote
원격 저장소 (remote repository)를 관리하는 명령어이다.
# 설정된 원격 저장소 보기
git remote -v
# 저장소 추가하기
git remote add test https://github.com/test/test
git push
원격 저장소에 코드 변경분을 업로드한다.
# 기본 사용
git push [저장소명] [branch]
# 인자 생략하기
# 1: -u 이용해서 최초 한 번만 저장소명과 브랜치명을 입력
git push -u [저장소명] [branch]
git commit ..
git commit ..
git commit ..
git push
# 2: push.default를 current 로 설정
git config --global push.default current
git push
# 로컬에서 생성한 branch를 push
git push --set-upstream [저장소명] [branch]
git branch
브랜치에 관련한 명령어들이다.
# 로컬 branch 확인
git branch
# 원격 저장소를 포함한 모든(all) branch 확인
git branch -a
# test 라는 branch 생성
git branch test
# test 로컬 branch를 origin이라는 원격 저장소의 test branch로 연결
git branch --set-upstream-to=origin/test test
# test branch 삭제
git branch -d test
# test branch 강제 삭제
git branch -D test
git checkout 👉 git switch/restore
branch를 변경하고 Working tree에서 변경점을 복원하는 역할을 한다. 2.23 버전 이후로는 switch/restore가 대신한다. 되도록 switch와 restore을 사용하는 것을 권장한다.
# test branch로 변경하기
git checkout test
git switch test
# test branch를 생성 후 test branch로 변경하기
git checkout -b test
git switch -c test
# 수정 내용 복원하기
git checkout -- Readme.md
git restore Readme.md
# 수정 내용을 stage에 이미 넣었을 때, 이를 빼기 위해
git reset HEAD Readme.md
git restore --staged Readme.md
git fetch
원경 저장소의 데이터를 가져온다. pull로 병합하기 전에 어떤 변경점이 있나 살펴볼 때 사용하기 좋다.
# origin 데이터를 가져오기
git fetch origin
# 모든 원격 저장소 데이터를 가져오기
git fetch --all
# remote에 존재하지 않는 refs를 지운 후 수행
git fetch --prune
git pull
원격 저장소에서 데이터를 가져온 후 로컬 branch에 병합
git pull
git pull --all
git stash
현재 작업중인 변경점을 임시 저장하거나 불러올 수 있다. 즉, 작업 도중 커밋을 할 수 없는 상태이지만 브랜치 전환이나 커밋 변경을 해야할 때 임시적으로 저장할 수 있는 명령어이다. commit 되기 이전 작업 중 파일과 git add로 추가된 파일까지 모두 stash 영역으로 저장된다.
# git add로 index에 트랙킹된 파일을 stash에 저장 되고, 수정 분량은 제거됨. 기본 명칭 WIP
git stash
# 새롭게 추가된 파일도 함께 stash 저장
git stash -u
# test라는 이름으로 저장
git stash save test
# 목록 확인
git stash list
# stash 불러와 적용하기
git stash apply
git stash apply test
# test라는 stash를 불러와 적용하고 staged 상태까지 적용
git stash apply test --index
# 가장 최근의 stash 적용하고 스택에서 삭제하기
git stash pop
# stash 삭제
git stash drop
git stash drop test
git blame
특정 파일의 수정 이력을 확인 할 수 있다. 각 라인 별로 누가 언제 마지막으로 수정했는지 알 수 있다.
# test.txt 파일의 수정 이력을 확인
git blame test.txt
# 5~10번 라인만 확인
git blame -L 5,10 test.txt
# 파일명이 변경되었다면, 변경전 파일명과 함께 확인
git blame -C newTest.txt
# 공백 변경을 무시
git blame -w test.txt
git diff
소스를 비교하여 볼 수 있다.
# 마지막으로 커밋된 소스와 현재 Unstaged 상태의 변경점과 비교
git diff
# 마지막으로 커밋된 소스와 현재 Staging 된 변경점과 비교
git diff --staged
# 커밋간 비교
git diff [커밋해시1][커밋해시2]
# branch간 비교
git diff [branch1][branch2]
git revert
지정한 커밋으로 되돌려 커밋한다. 되돌린 이력이 남기 때문에 충돌이 발생할 위험이 적으며 협업 상황에서 사용하는것이 좋다.
# 특정 커밋으로 되돌리고 커밋
git revert [커밋해시]
# 특정 태그로 되돌리고 커밋
git revert [태그명]
# 특정 커밋으로 되돌리지만 커밋은 안한채로 Staging 상태 유지
git revert --no-commit [커밋해시]
git tag
특정 커밋에 표기하는 기능으로 주로 릴리즈 시에 이용한다. Lightweight 태그와 Annotated 태그가 있다. Lightweight 태그는 단순히 버전 등의 이름을 남길 때 사용한다. Annotated 태그는 만든 사람의 이름, 이메일, 날짜, 메시지까지 정하며 GPG(GNU Privacy Guard)로 서명까지 가능한다.
# 현재 HEAD에 v1.0.0이라는 Lightweight 태그 생성
git tag v1.0.0
# 현재 HEAD에 v1.0.0이라는 Anootated 태그 생성
git tag -a v1.0.0 -m "메시지"
# 특정 커밋에 v1.0.0이라는 Lightweight 태그 생성
git tag v1.0.0 [커밋해시]
# v1.0.0 태그를 원격 저장소에 푸시하기
git push origin v1.0.0
# 모든 로컬 태그를 원격 저장소에 푸시하기
git push origin --tags
# 로컬의 v1.0.0 삭제
git tag -d v1.0.0
# 원격 저장소의 v1.0.0 태그 삭제
git push -d origin v1.0.0
git merge
현재 브랜치를 특정 브랜치의 소스와 병합한다.
# master branch를 병합
git merge master
# 병합 충돌(conflict) 발생 시 취소
git merge --abort
git rebase
# 원격 저장소의 master 브랜치로 rebase
git rebase origin/master
'코딩 > 정말 나는 잘 알고 있을까?' 카테고리의 다른 글
Git pull 에러 (0) | 2022.05.31 |
---|---|
Webpack, Babel 이 뭐야? (feat. Framework, Library) (0) | 2022.05.25 |
Git - Mac에서 Git 사용하기 (0) | 2022.05.21 |
GIt - Github, Gitlab (2) (0) | 2022.05.17 |
GIt - Github, Gitlab (1) (0) | 2022.05.15 |