zsh로 git 빠르게 쓰기

우현민·2024년 3월 14일
7

settings

목록 보기
1/1
post-thumbnail

많은 개발자들이 터미널로 zsh 을 이용합니다. 보통 zsh 을 이용하면 zsh git plugin 을 이용하곤 하는데요, 보통 .zshrc 파일을 보면 아래와 같이 zsh plugin 이 이미 설치되어 있는 모습을 볼 수 있습니다.

plugins=(
  git
)

이 plugin 은 git 명령어를 짧게 쓸 수 있는 다양한 별칭들을 제공합니다. 이 별칭들을 활용하면 터미널에서 git 명령어를 입력하는 시간을 크게 줄일 수 있습니다.

실제로 제가 최근에 개발한 기록을 보면 아래와 같습니다.

플러그인을 활용하여 git 명령어를 입력하는 시간을 크게 단축했습니다.

플러그인이 제공하는 전체 별칭 목록은 여기서 확인할 수 있습니다.



기능 살펴보기

우선 여러 옵션을 제외하고도 git의 대부분의 기능은 별칭으로 사용할 수 있습니다. 예시로 gagit add 이고, gpgit push, gstgit status, gswgit switch 입니다.

따라서 이거만 줄여도 많은 시간을 아낄 수 있습니다.

ga --all                  		# git add --all
gsw -c feat/user      		  	# git switch -c feat/user
gc --all --message "temp"     	# git commit --all --message "temp"



여기에 더해서, 자주 사용하는 옵션들도 별칭으로 제공됩니다. 가령 gswcgsw -c 를 줄여 쓴 것이고, gcamgit commit --all --message 를 줄여 쓴 것입니다.

적용하면 아래와 같이 쓸 수 있습니다.

gaa              	# git add --all
gswc feat/user     	# git switch -c feat/user
gcam "temp"     	# git commit --all --message "temp"

이런 식으로 총 200개 정도의 별칭이 제공됩니다.



유용한 명령어들

아래는 제가 애용하는 명령어들 목록입니다.

상태 보기

  • gst
    • 개발하면서 정말 많이 이용하게 되는 git status 입니다.
  • glog
    • git log --oneline --decorate --graph 의 별칭입니다.
    • 아래와 같이 예쁜 형태로 보여줍니다.
    • 사실 glols 같은 걸 이용하면 더 예쁜 그래프를 보여주긴 하는데, 딱히 유용하게 쓰
      지는 않았습니다.

코드 변경하기

  • gsta / gstp
    • 변경사항을 임시 저장했다가 다시 적용할 수 있는 git stash push, git stash pop 입니다.
  • grhh
    • 커밋 이후로 했던 모든 변경사항을 날려버리는 git reset --hard 입니다.
    • 대충 끄적끄적해보다가 망해서 다시 하고 싶을 때 유용합니다.
  • grs
    • 특정 파일만 직전 커밋의 상태로 되돌리는 git restore 입니다.
    • 원치 않던 파일이 변경되었을 경우 되돌리기 좋습니다.

커밋 다루기

  • gcam
    • tracked file 의 변경사항을 모두 커밋하는 git commit --all --message 입니다.
    • gcam "test" 이런 식으로 간단하게 모든 파일을 커밋할 수 있습니다.
  • gca!
    • git commit --verbose --all --amend 와 동일하게 동작합니다.
    • 커밋을 했는데 해당 커밋에서 추가로 하고 싶은 변경사항이 생겼거나, 커밋을 했는데 실수로 일부 파일이 track되지 않아 커밋에 포함되지 않아서 커밋을 다시 하고 싶은 상황에서 유용합니다.
  • grbm
    • git rebase $(git_main_branch) 입니다.
    • 피쳐브랜치에서 개발하던 중 main 브랜치가 변경되었다면 main 브랜치를 rebase 해서 개발을 진행하게 되는데, 이럴 때 유용합니다.

브랜치 변경하기

  • gswm
    • git switch $(git_main_branch) 입니다. 메인 브랜치로 이동합니다.
  • gsw -
    • git switch - 입니다. 이전 브랜치로 이동합니다.
    • 메인 브랜치와 피쳐 브랜치 사이에서 왔다갔다 하는 등의 상황에서 유용합니다.
  • gswc
    • git switch -c 입니다.

origin 과 소통하기

  • gl
    • git pull 입니다. 정말 많이 쓰게 되는 커맨드입니다.
    • 간혹 git pull --rebase 를 하고 싶을 때가 있는데, 그럴 땐 gpr 하면 됩니다.
  • gp
    • git push 입니다. 마찬가지로 정말 많이 사용하게 됩니다.
  • gpf
    • 이 친구는 포스푸시인데, 중요하다고 생각해서 특별히 따로 분리했습니다.
    • git push --force-with-lease --force-if-includes 로 동작합니다.
    • 보통 git push --force 와 같은 방식을 많이 이용하지만, 사실 이건 변경사항을 날려버리거나 깃을 꼬이게 할 수 있는 등 매우 위험합니다.
    • 안전하게 포스푸시하기 위해서는 위와 같이 길다란 커맨드를 입력해야 하는데, gpf 로 간단하게 할 수 있습니다.



적용해보기

그럼 몇 가지 예시 상황을 들어 보겠습니다.

피쳐브랜치에서 개발하던 중 main 에서 좀 멀어져서 코드를 최신화하고 싶을 때

gswm		# git switch $(git_main_branch)
gl			# git pull
gsw -		# git switch -
grbm		# git rebase $(git_main_branch)
gpf			# git push --force-with-lease --force-if-includes

커밋을 했는데 파일을 하나 빼먹었을 때

gaa			# git add --all
gca!		# git commit --verbose --all --amend

메인 브랜치와 피쳐 브랜치 사이의 변경사항을 스크린샷으로 캡쳐해서 올릴 때

# 지금 있는 피쳐 브랜치에서 스크린샷을 찍고
gswm		# git switch $(git_main_branch)
# 메인 브랜치로 이동했으니 스크린샷을 찍고
gsw -		# git switch -

public/ 폴더의 내용물들이 지 혼자 바뀌어 버려서 되돌리고 싶을 때

grs public	# git restore public

신나게 개발하다가 갑자기 회의에 가야 할 때

gwip		# git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]"

놀랍게도 모든 파일 add 하고 "--wip-- [skip ci]" 라는 커밋을 하는 명령어인데.. 저도 몇 번 안 써 봤습니다


평범한 개발 사이클

gswm					# git switch $(git_main_branch)					# 메인브랜치 가서
gl						# git pull										# 코드 최신화땡기고
gl						# git pull										# 그냥 괜히 두번씩 하게 됩니다
gswc "feat/user"		# git switch -c "feat/user"						# 브랜치 분기
gcam "udpate zshrc"		# git commit --all --message "update zshrc"		# 커밋
gaa						# git add --all									# 파일 하나 덜 커밋했단 걸 발견
gca!					# git commit --all --verbose --amend			# 다시 커밋
gp						# git push										# 깃헙에 푸시



결론

이렇게 zsh git plugin 이 제공하는 별칭들을 통해 깃 명령어를 더 빠르게 입력할 수 있습니다. 작은 차이로 보이지만 의외로 터미널에서 소스를 자주 건드리다 보면 생각보다 유의미한 생산성 차이가 생기게 되는데요, 어색하더라도 조금씩 연습해보면 어떨까요?

profile
프론트엔드 개발자입니다

1개의 댓글

감사합니다!

답글 달기