zsh을 사용하고 있다. zsh을 사용하는 경우 ~/.zshrc 파일의 plugins 부분에 원하는 플러그인을 추가하여 사용할 수 있다.
https://github.com/zsh-users/zsh-autosuggestions
https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins
이 2곳에 존재하는 플러그인들이 가장 많이 사용되고 있는 것 같다. 필요한 플러그인을 설치해서 추가하면 되겠다.
oh my zsh를 사용해서 그런건지, 아니면 zsh이 기본적으로 제공하는건지는 모르겠지만 처음부터 git에 대한 플러그인이 추가되어 있었다.
이 경우 alias 명령어를 입력해보면, git과 관련된 다양한 명령어의 alias가 등록되어 있다는 사실을 알 수 있다.
그 중 (내가) 자주 쓸법한 명령어만 하단에 정리해보았다.
g=git
gaa='git add --all'
gbD='git branch -D'
gbd='git branch -d'
gcb='git checkout -b'
gcd='git checkout $(git_develop_branch)'
gcm='git checkout $(git_main_branch)'
gco='git checkout'
gcp='git cherry-pick'
gcpa='git cherry-pick --abort'
gcpc='git cherry-pick --continue'
gl='git pull'
ggpull='git pull origin "$(git_current_branch)"'
gp='git push'
gpf!='git push --force'
ggpush='git push origin "$(git_current_branch)"'
grb='git rebase'
grba='git rebase --abort'
grbc='git rebase --continue'
grbd='git rebase $(git_develop_branch)'
grbm='git rebase $(git_main_branch)'
grbom='git rebase origin/$(git_main_branch)
gsta='git stash push'
gstp='git stash pop'
gstd='git stash drop'
gstl='git stash list'
alias gcoBAR='f() { git checkout feature/BAR-$1; }; f'
$ gcoBAR 300 입력시 feature/BAR-300 으로 checkout 된다.
alias gcob='f() { my_branch=("feature/PROJECT-NAME" "bug/PROJECT-NAME"); if [ -n "$1" ]; then git checkout -b $(echo "${my_branch}" | tr " " "\n" | fzf)-$1; fi; }; f'
alias gco='f() { my_branch=("feature/PROJECT-NAME" "bug/PROJECT-NAME"); if [ -n "$1" ]; then git checkout $(echo "${my_branch}" | tr " " "\n" | fzf)-$1; git pull origin $1; fi; }; f'
$ gcob 1234
$ gco 1234
보통 프로젝트를 하다보면 feature | bug | hotfix/${프로젝트명}-${이슈번호} 형태의 브랜치명을 사용하게 된다. 즉 브랜치명에서 동적인 부분은 이슈번호 하나뿐이다. 때문에 alias 설정을 통해 사용자의 입력은 alias 명령어 + 이슈번호 단 두개로 줄일 수 있다. (이슈번호가 입력되지 않은 경우는 처리하지 않는다.)
my_branch 라는 변수 정의를 통해 고정적인 이름의 브랜치명을 정의해둔다. fzf 라이브러리를 활용하여 사용자가 이 고정적인 형태의 브랜치명 중 필요한 것을 고를 수 있도록 한다.
(fzf는 입력으로 개행이 된 문자열을 기대하므로, tr 명령어를 통해 띄어쓰기를 개행으로 치환한다.)
alias gcod='f() {git checkout develop; git pull origin develop}; f'
alias gcom='f() {git checkout master; git pull origin master}; f'
보통 develop | master 와 같은 브랜치로 이동하는 경우 최신화를 목적으로 하기 때문에 바로 pull을 한다.
alias glf='f() {git fetch origin $(git_current_branch); git reset --hard origin/$(git_current_branch)}; f'
현재 브랜치가 force push 된 경우 기본적인 pull이 불가능해진다. 이 경우 해당 alias를 통해 최신화시킬 수 있다.
https://stackoverflow.com/questions/2553786/how-do-i-alias-commands-in-git
다양한 예제가 많아서 살짝 복잡한 구문이 필요한 경우 한번 읽어보고 시작하면 좋을 듯
https://johngrib.github.io/wiki/git-alias/
링크의 글에서는 .gitconfig 파일에 alias를 설정하여 사용하고 있다.
그 방식이 shell 자체에 alias를 설정하는 방식과 크게 다르지 않기 때문에 참고하기 정말 좋은 글이다.
해당 글 이외에도 정말 좋은 내용의 포스팅들이 많아서 자주 들어가봐야겠다.
터미널에 적용한 alias 설정은 휘발성이다. 계속해서 적용하고 싶다면 shell 설정 파일에 직접적으로 작성해주어야 한다. zsh의 경우 ~/.zshrc 파일에 원하는 alias를 작성해주면 계속해서 적용된다.
git의 몇몇 명령어들은 (ex. git branch) 그 결과를 vi 에디터에 노출한다. 그 결과가 적은 경우에는 외워서 사용하면 되지만, 많은 경우에는 내용이 기억나지 않아 몇번이나 불편하게 왔다갔다 해야 하는 경우가 있다. 이럴 때 명령어 뒤쪽에 cat 파이프라인 명령어 (| cat ) 를 추가해서 작성하면 터미널에 결과로 노출시킬 수 있어서 편리하다.
기본 터미널에서는 cmd + 방향키, opt + 방향키를 통한 문장, 단어 이동이 불가능해서 불편하다.
해당 질문의 두번째 답변의 1번 (Simple solution)을 그대로 적용하면 기본적으로 사용하는 키매핑을 터미널에서도 그대로 사용할 수 있게 된다.
https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
shell programming if문의 조건부에서 사용할 수 있는 옵션들
별거 아닌 설정이지만 이렇게 조금씩 불필요하게 낭비되는 시간을 줄이는게 꽤나 도움이 된다고 느끼는 요즘이다.
불필요한 시간은 동균님이 롤하는 시간 아닌가요?