Tools/git

Git 명령어 정리

비비빅B 2021. 12. 28. 23:57

다른 깃 명령어들도 많지만, 기본적인 것을 제외한 내가 자주 쓰는 명령어 위주로 정리했다.

stash

 

git에 의해 추적되고 있는 파일들을 임시로 보관한다.

나같은 경우에는 작업 중에 우선순위가 높은 작업(오류)이 생겨서 급하게 처리해야할 때 자주 쓴다.

$ git stash save 명시적인기록

$ git stash --keep-index

이미 스테이징된 파일만 임시 저장됨

$ git stash -u

트래킹하지 않는 파일도 임시 저장됨

stash 스택 조회
$ git stash list

stash 적용, <> 부분이 생략되면 스택 가장 윗부분이 적용됨
$ git stash apply <stash address>

stash 제거, <> 부분이 생략되면 스택 가장 윗부분이 제거됨
$ git stash drop <stash address>

stash 스택 적용 및 삭제, <> 부분이 생략되면 스택 가장 윗부분이 제거됨
$ git stash pop <stash address>

브랜치를 생성하면서 그 곳에 stash 적용
$ git stash branch <branch name>

switch

 

브랜치를 변경할 때 쓰인다. 브랜치를 생성하면서 변경할 수도 있다(--create).

브랜치 간 이동에서는 커밋되지 않은 변경된 파일은 같이 이동된다. 이 부분이 좀 헷갈렸는데, 브랜치 이동은 커밋되지 않은 파일은 신경쓰지 않고 커밋 로그만 신경쓴다고 생각하니 이해하기 편했다.

$ git switch -c new-branch

브랜치 이동은 커밋된 것만 관리함

제일 최근에 있었던 브랜치로 이동
$ git switch -

pull

 

만약 브랜치에서 다른 브랜치의 변경사항을 반영하고 싶은 경우에는 fetch 혹은 pull을 사용한다. --rebase 옵션을 사용하면 좀 더 깔끔한 히스토리를 만들 수 있다.

원격 브랜치 변경사항 반영
$ git pull --rebase

* 브랜치 간의 변경사항 반영
1. 로컬 브랜치 변경사항 반영
$ git pull . <target-branch> --rebase

2. 원격 브랜치 변경사항 반영
$ git pull <remote:origin> <target-branch> --rebase

develop 브랜치에서 로컬 master 브랜치의 변경사항 반영


reflog

 

명령어의 히스토리를 볼 수 있다. 이 히스토리를 보고 원하는 명령 이전 상태로 돌아갈 수 있다.

$ git reflog

@는 HEAD의 ALIAS
$ git reset --hard @{1}

제일 최근에 merge 병합한 기록
hard reset으로 되돌림


revert

 

보통 원격 서버에 push까지 했는데, 어떠한 이유로 이전 커밋으로 복원해야 할 경우 쓰인다.

 

로컬에서만 커밋한 거면 reset으로 커밋 히스토리를 안남기고 깔끔하게 복원할 수 있지만,

이미 원격 서버에 올라간 경우라면 revert로 취소 이력까지 남기는 것이 안전하고 좋다.

단일 커밋 취소, 커밋 메시지 자동 생성
$ git revert <commit index> --no-edit

여러 커밋 취소, 커밋 보류 상태
$ git revert -n <commit index>..<commit index>

최근 커밋 2개 취소


commit, rebase

 

보통 커밋 내용을 덮어씌워, 불필요한 커밋 메시지를 줄이기 위해 사용한다. rebase 명령어는 주로 pull request를 날려서 다른 브랜치에 반영하기 전에 사용된다.

최근 커밋에 덮어쓰기
$ git commit --amend

대화형으로 커밋내역들 rebase하기
$ git rebase -i

최근 2개 커밋 압축, 대화형 창이 생기고 아래 커밋에 squash 옵션을 주면 된다.
하나로 압축된 커밋


clean

 

깃이 추적하지 않는 파일을 삭제한다. 전혀 쓸 일 없을 줄 알았는데, 가끔씩 쓰게된다.

복구하기 어려우니 실행 결과를 미리 볼수 있는 --dry-run 옵션은 필수다.

추적하지 않는 파일 강제 삭제
$ git clean -f

디렉토리까지 삭제
$ git clean -d

실행 결과 미리 보기
$ git clean -n

.gitignore에 포함된 파일도 삭제
$ git clean -x

.gitignore에 포함된 파일만 삭제
$ git clean -X

diff

커밋 할 때, 혹은 커밋 당시 무슨 내용이 달라졌는지 아니면 어떤 파일이 달라졌는지 알고 싶을 때가 있다. 기본적으로 diff로 변경사항을 볼 수 있고 다른 명령어에서도 추가 옵션으로 확인할 수 있다.

diff 옵션은 git이 추적하는 파일만을 대상으로 한다.

 

index의 변경 보기, 다른 말로 깃이 추적하는 파일 중 아직 add하지 않은 파일의 변경 상태 확인
$ git diff

working tree(local + stage)과 대상 간의 차이, 대상을 생략할 경우 기본으로 HEAD(@)
$ git diff <commit or branch name>

stage 영역(local 제외)에 올라간 파일과 대상 간의 차이
$ git diff --cached <commit or branch name>

히스토리에서 상세 변경 보기
$ git log -p

히스토리에서 변경된 파일 목록 보기
$ git log -name-only

커밋 메시지 작성하면서 변경 사항 보기
$ git commit -v

 

git log --name-only
git log -p
git commit -v


일부 커밋만 푸쉬

일부 커밋만 원격 저장소에 반영
$ git push <remote> <commit hash>:<branch>

 

'Tools > git' 카테고리의 다른 글

커밋 주기는 어느정도가 적당할까?  (0) 2023.05.08
Github-flow, Git-flow (1)  (0) 2020.11.06