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



reflog
명령어의 히스토리를 볼 수 있다. 이 히스토리를 보고 원하는 명령 이전 상태로 돌아갈 수 있다.
$ git reflog
@는 HEAD의 ALIAS
$ git reset --hard @{1}


revert
보통 원격 서버에 push까지 했는데, 어떠한 이유로 이전 커밋으로 복원해야 할 경우 쓰인다.
로컬에서만 커밋한 거면 reset으로 커밋 히스토리를 안남기고 깔끔하게 복원할 수 있지만,
이미 원격 서버에 올라간 경우라면 revert로 취소 이력까지 남기는 것이 안전하고 좋다.
단일 커밋 취소, 커밋 메시지 자동 생성
$ git revert <commit index> --no-edit
여러 커밋 취소, 커밋 보류 상태
$ git revert -n <commit index>..<commit index>

commit, rebase
보통 커밋 내용을 덮어씌워, 불필요한 커밋 메시지를 줄이기 위해 사용한다. rebase 명령어는 주로 pull request를 날려서 다른 브랜치에 반영하기 전에 사용된다.
최근 커밋에 덮어쓰기
$ git commit --amend
대화형으로 커밋내역들 rebase하기
$ git rebase -i



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 push <remote> <commit hash>:<branch>
'Tools > git' 카테고리의 다른 글
커밋 주기는 어느정도가 적당할까? (0) | 2023.05.08 |
---|---|
Github-flow, Git-flow (1) (0) | 2020.11.06 |