원격 브랜치의 git checkout을 peco로 쉽게 만들기

3721 단어 MacGitPeco
Pull Request 의 리뷰시 등 리모트 브랜치를 떨어뜨릴 때 , 매회 브랜치명을 코피페 해 체크아웃 하는 것이 수수하게 귀찮기 때문에 peco 로 브랜치를 선택하는 것만으로 체크아웃 할 수 있도록 했습니다.



명령


git checkout $(git branch -a --sort=-authordate | cut -b 3- | grep -v -- "->" | peco | sed -e "s%remotes/origin/%%")

(위의 동영상에서 oh-my-zsh의 명령 별칭에서 git 명령을 단축했습니다.)

추가 (2019/01/16)



명령을 조금 개선했습니다.
git branch -a --sort=-authordate | grep -v -e '->' -e '*' | perl -pe 's/^\h+//g' | perl -pe 's#^remotes/origin/##' | perl -nle 'print if !$c{$_}++' | peco | xargs git checkout

변경점:
  • 원격 브랜치와 로컬 브랜치를 함께 표시합니다.
  • peco 를 CTRL-C 등으로 중단한 경우 거기에서 명령을 종료하도록 했습니다. (git checkout를 실행할 수 없음)
  • GNU/BSD 환경을 신경 쓰지 않고 사용할 수 있도록 Perl을 사용하도록 대체했습니다.

  • 별칭을 설정하려면 .bashrc, .zshrc 등에 다음 함수 정의를 추가하면 gcop 브랜치를 선택할 수 있습니다. git checkout peco의 약자이지만 기호로.
    gcop() {
      git branch -a --sort=-authordate |
        grep -v -e '->' -e '*' |
        perl -pe 's/^\h+//g' |
        perl -pe 's#^remotes/origin/##' |
        perl -nle 'print if !$c{$_}++' |
        peco |
        xargs git checkout
    }
    

    파이프의 각 명령 설명



    git branch -a --sort=-authordate



    리모트 추적 브랜치를 포함한 브랜치명의 일람을, 브랜치의 선도순으로 역순으로 소트한 상태로 취득합니다.

    grep -v -e '->' -e '*'



    다음 두 패턴의 행을 제거합니다.
  • origin/HEAD의 목적지를 포함하는 행 :
  • e.g. origin/HEAD -> origin/master

  • 현재 분기의 행 :
  • e.g. * develop


  • perl -pe 's/^\h+//g'



    각 줄 머리의 공백을 삭제합니다.

    perl -pe 's#^remotes/origin/##'


    #는 구분 기호입니다. (슬래시의 이스케이프 지옥을 피하기 위해서 슬래시 이외를 구분자에 사용.)

    리모트 추적 브랜치명의 선두에는 remotes/origin/ (이)가 붙습니다만, 이것을 포함한 상태로 그대로 체크아웃 하면, 로컬 브랜치가 작성되지 않고, 이른바 detached HEAD 상태가 되어 버려 불편하므로 제거합니다.

    perl -nle 'print if !$c{$_}++'



    정렬하지 않고 중복 행을 제거합니다.

    peco



    페코.

    좋은 웹페이지 즐겨찾기