자주 사용하는 Git CLI (Command line interface)
CLI(Command line Interface)는 습관입니다.
외운다고 되는 것이 아니라 시간을 투자해 반복적으로 사용해야 몸에 익혀져요.
GUI Tool로 쉽게 할 수 있지만 CLI로 서투르지만 하나하나 해보세요.
처음에는 시간이 걸릴지라도 점점 자유롭게 쓸 수 있을 거예요.
GUI Tool에 의존하지 마세요. Git을 얼마나 많이 사용하나요?
전 빈번하게 사용을 해요. 여러 프로젝트를 다루다 보니 이곳저곳 프로젝트를 돌아다니죠.
MSA 기반이라면 더더욱 그럴 것 같아요.
그리고 자주 사용될 Git 명령어들이 복잡할까요? 그렇지 않아요. 복잡할 경우는 극히 드물어요.
그래서 전 IntelliJ 나 VSCode에 내장되어 있는 터미널로 빠르게 명령을 내릴 수 있어요.
GUI Tool을 실행하고 프로젝트를 찾고 커밋 파일들을 스테이지하고 메시지를 입력하고 커밋 하는 수고를 줄일 수 있어요.
이게 점차적으로 반복될 때 GUI Tool 을 작업시간을 변함없지만 Git CLI는 점점 작업 시간이 줄어들 거예요.
명령어가 기억나지 않는다면 -h 옵션으로 확인할 수 있습니다.
$ git log -h
tab 키를 이용하면 단어에 관련된 명령어도 리스트 업해주기도 해요.
rebase를 사용하세요. 처음 시작은 merge로 사용하는 게 뭐가 문제냐 싶지만 시간이 지나보면 내가 무슨 짓을 한 거지 깨달을 거예요.
쓸모없는 커밋은 정리해 주는 게 좋아요. 이것도 rebase로 할 수 있고 -i 옵션을 사용하면 돼요.
아래는 주로 사용하는 명령어를 정리해 보았어요. 생각날 때마다 추가할게요.
설정
git 설정 보기
$ git config -l
원격 저장소 설정하기
# 원격저장소 복제하기
$ git clone http://....
# 기본 원격 저장소 설정
$ git push -u 원격저장소명
# 원격 저장소 등록
$ git remote add origin http://...
# 원격 저장소 이름 변경
$ git remote rename origin remote
기본 명령어
pull rebase
# 원격 저장소 내려받고 rebase 하기
git pull --rebase
pull merge 되돌리기 (복원하기)
$ git reset --head ORIG_HEAD
$ git reset --merge ORIG_HEAD
원격 브랜치 가져오기
# 원격 정보를 업데이트 한다.
git remote update
# 브랜치를 생성하고 가져온다.
git checkout -t origin/브랜치명
# 다른 브랜치를 생성하고 가져온다.
git checkout -b 새로운브랜치명 origin/브랜치명
# 브랜치가 아닌 커밋을 직접 참조한 상태에서 가져온다. Detached HEAD 라고한다.
git checkout origin/브랜치명
변경된 상태 초기화하기
# 특정 파일 변경 상태 초기화하기
$ git restore 파일명
# 스테이지 상태를 내리기
--stage
# 변경 상태 초기화 하기
$ git reset --hard
--mixed HEAD와 인덱스를 초기화
--soft HEAD만 초기화
--hard HEAD, 인덱스, 작업폴더를 초기화
# 변경사항 청소하여 정리하기
$ git clean -i -d
-d: 폴더까지 제거
현재 브랜치 변경하기
$ git switch 브랜치명
강제 원격저장소 push 하기
$ git push -u 원격저장소명 +브랜치명
stash
$ git stash
or
# 현재 스테이지을 스태쉬에 저장하기
$ git stash save
# 저장된 스태쉬 목록보기
$ git stash list
# 스태쉬 적용하기
$ git stash apply stash@{0}
# 적용한 스태쉬 되돌리기 (복원하기)
$ git stash show -p | git apply -R
# 저장된 스태쉬 삭제하기
$ git stash drop stash@{0}
고급
커밋 히스토리 변경 : rebase
$ git rebase -i @~3
-i: 인터랙티브 (상호간에 협의에 의해 결정하는 것) 즉 사용자가 리베이스할 커밋 목록을 편집할 수 있도록 한다.
@~3: 최근 3개의 커밋을 rebase 한다.
--root: 전체 커밋을 rebase 한다.
# p, <commit> 선택 = 커밋 사용
# r, reword <commit> = 커밋을 사용하지만 커밋 메시지를 편집합니다.
# e, edit <commit> = 커밋을 사용하지만 수정을 위해 중지
# s, squash <commit> = 커밋을 사용하지만 이전 커밋에 병합
# f, fixup <commit> = "squash"와 비슷하지만 이 커밋의 로그 메시지를 버립니다.
# x, exec <command> = 쉘을 사용하여 명령(나머지 줄) 실행
# b, break = 여기서 중지(나중에 'git rebase --continue'로 계속 리베이스)
# d, drop <commit> = 커밋 제거
# l, <label> 레이블 = 현재 HEAD에 이름으로 레이블 지정
# t, <label> 재설정 = HEAD를 레이블로 재설정
--continue 계속
--skip 현재 패치를 건너뛰고 계속
--abort 중단하고 원래 분기를 확인합니다.
코멘트변경
$ git commit --amend
커밋 히스토리 조회
# 2개 커밋 로그 출력
$ git log -p -2
# 커밋 로그 통계 출력
$ git log --stat
# 커밋 로그 한줄 출력
$ git log --pretty=oneline
# 커밋 로그 그래프로 보기
$ git log --pretty=oneline --graph
상태(log, diff, show) 출력시 사용할 수 있는 옵션
common diff options:
-z output diff-raw with lines terminated with NUL.
-p output patch format.
-u synonym for -p.
--patch-with-raw
output both a patch and the diff-raw format.
--stat show diffstat instead of patch.
--numstat show numeric diffstat instead of patch.
--patch-with-stat
output a patch and prepend its diffstat.
--name-only show only names of changed files.
--name-status show names and status of changed files.
--full-index show full object name on index lines.
--abbrev=<n> abbreviate object names in diff-tree header and diff-raw.
-R swap input file pairs.
-B detect complete rewrites.
-M detect renames.
'Tech' 카테고리의 다른 글
프로젝트 코드 템플릿 - Project Code Templates (0) | 2021.10.28 |
---|---|
OAuth 2.0 Simplified (0) | 2021.10.18 |
HTTP 클라이언트 테스트를 위한 WireMock - Test MockServer (0) | 2021.10.08 |
OpenFegin Example (0) | 2021.10.07 |