2016-04-09 2 views
4

Я нашел git examples with fzf(fuzzy finder), и они отлично работают. как:Как получить ветку git с нечетким поиском?

# fbr - checkout git branch 
fbr() { 
    local branches branch 
    branches=$(git branch -vv) && 
    branch=$(echo "$branches" | fzf +m) && 
    git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //") 
} 

# fbr - checkout git branch (including remote branches) 
fbr() { 
    local branches branch 
    branches=$(git branch --all | grep -v HEAD) && 
    branch=$(echo "$branches" | 
      fzf-tmux -d $((2 + $(wc -l <<< "$branches"))) +m) && 
    git checkout $(echo "$branch" | sed "s/.* //" | sed "s#remotes/[^/]*/##") 
} 

у меня есть это в мой .bashrc

bind '"\C-b": "fbr \n"' 

После жму Ctrl-B я получаю выбрать ветвь а GIT и он переключается сразу после жму войти, но есть способ напечатать что-то сначала, как git push staging (а затем получить список ветвей и поместить выбранную ветвь вправо, где курсор был до вызова списка ветвей, а затем я нажимаю клавишу ввода, чтобы направить выбранную ветвь на staging)

Ex: git push staging (Ctrl-б - выбрать ветку) и я хочу, чтобы этот выход - git push staging selected_branch

+1

Считается, что git завершен? https://github.com/git/git/blob/master/contrib/completion/git-completion.bash – webb

+0

@webb большое спасибо. – whitesiroi

ответ

4

Они являются ключевыми привязками, которые я использую в Баше

  • CTRL- GCTRL-F - файлы, перечисленные в git status
  • CTRL-GCtrl-B - Ветви
  • CTRL-GCTRL-T - Метки
  • CTRL-GCtrl-H - Commit хешей
  • CTRL-GCTRL- R - Пульты

Отметьте, что redraw-current-line не требуется, если вы находитесь на tmux.

is_in_git_repo() { 
    git rev-parse HEAD > /dev/null 2>&1 
} 

gf() { 
    is_in_git_repo && 
    git -c color.status=always status --short | 
    fzf --height 40% -m --ansi --nth 2..,.. | awk '{print $2}' 
} 

gb() { 
    is_in_git_repo && 
    git branch -a -vv --color=always | grep -v '/HEAD\s' | 
    fzf --height 40% --ansi --multi --tac | sed 's/^..//' | awk '{print $1}' | 
    sed 's#^remotes/[^/]*/##' 
} 

gt() { 
    is_in_git_repo && 
    git tag --sort -version:refname | 
    fzf --height 40% --multi 
} 

gh() { 
    is_in_git_repo && 
    git log --date=short --format="%C(green)%C(bold)%cd %C(auto)%h%d %s (%an)" --graph | 
    fzf --height 40% --ansi --no-sort --reverse --multi | grep -o '[a-f0-9]\{7,\}' 
} 

gr() { 
    is_in_git_repo && 
    git remote -v | awk '{print $1 " " $2}' | uniq | 
    fzf --height 40% --tac | awk '{print $1}' 
} 

bind '"\er": redraw-current-line' 
bind '"\C-g\C-f": "$(gf)\e\C-e\er"' 
bind '"\C-g\C-b": "$(gb)\e\C-e\er"' 
bind '"\C-g\C-t": "$(gt)\e\C-e\er"' 
bind '"\C-g\C-h": "$(gh)\e\C-e\er"' 
bind '"\C-g\C-r": "$(gr)\e\C-e\er"' 
+0

+ один Aaawesome, он отлично работает ^^ Спасибо, помощник ^^ – whitesiroi

+1

Нет проблем. Обновлен gb(), чтобы включить удаленные ветви. –

+0

Спасибо большое :) – whitesiroi

Смежные вопросы