코딩/정말 나는 잘 알고 있을까?

GIt - Github, Gitlab (3)

호상박 2022. 5. 17. 16:26

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