많이 사용한 git commands 정리
일 할 때 자주 사용하고 유용한 git 명령어 정리
1. tag
tag 생성
| |
tag 덮어쓰기
| |
prune
fetch prune-tags는 remote에서 제거된 tag를 local에서 자동으로 제거해준다.
| |
local에만 있던 tag도 remote에 없으면 제거될 수 있으니 주의.
2. rebase
git rebase -i 뒤에 뭐가 오는건지 항상 헷갈렸는데, 어떤 상태를 base로 할 건지를 적으면 된다.
| |
origin/main이라면 로컬에 저장된 remote-tracking ref인 origin/main을 base로 하고 그 이후 커밋을 interactive rebase한다는 뜻이고,
HEAD~3이라면 현재 HEAD의 3번째 조상 커밋을 base로 하고 그 이후 커밋 3개를 rebase하겠다는 뜻이다. HEAD가 0번째, HEAD~1이 1번째 이전 커밋이라고 생각하면 된다.
fixup
n번째 이전 커밋에 현재 변경 내역을 집어넣고 force-push하고 싶을 때 유용하다.
| |
--fixup 옵션으로 커밋하면 HEAD~3 번째 커밋 메시지에 fixup!이 붙은 형태로 commit된다. (ex. fixup! commands 제거)
| |
위처럼 HEAD~5까지 불러와서 rebase를 해도 된다.
(HEAD~3에 fixup commit을 만들었다면, rebase할 때는 fixup commit이 HEAD~0이 되고 기존 commit이 HEAD~4가 될테니까 HEAD~5를 base로 해야 원하는 작업이 될듯..?)
| |
위처럼 나온 걸 아래처럼 fixup으로 바꾸고 :wq하면 rebase 완료
| |
하지만 더 간단하게 하는 방법은, commit --fixup으로 생긴 커밋은 git이 자동으로 감지한다.
| |
autosquash 옵션은 fixup 커밋을 자동으로 찾아서 대상 커밋 아래로 옮기고 fixup으로 바꿔준다.
reword
commit message만 바꾸고 싶을 때 사용한다.
위와 마찬가지로 git rebase -i를 사용하고 pick를 reword (줄여서 r도 가능)로 넣어주면 다음 화면에서 commit message 수정 가능하다.
3. remote
branch 작업 완료 후 origin/main에 merge한 후에 다시 똑같은 브랜치에서 작업하고 싶을 때.
| |
reset --hard는 커밋한 적 없는 tracked 파일의 변경 사항을 복구하기 어려우므로 주의해야 한다.