14

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のブランチを選択し、Enterを押すとすぐに切り替わりますが、最初に次のようなものを入力する方法はありますかgit push staging(そして、ブランチのリストを取得し、選択したブランチをカーソルがあった場所に配置します)ブランチのリストを呼び出してから、Enter キーを押して、選択したブランチを にプッシュしますstaging)

例: git push staging( Ctrl-b - ブランチを選択) この出力を取得したい -git push staging selected_branch

4

2 に答える 2

19

これらは私がbashで使用するキーバインディングです

  • CTRL-GCTRL-F- にリストされているファイルgit status
  • CTRL-GCTRL-B- 枝
  • CTRL-GCTRL-T- タグ
  • CTRL-GCTRL-H- ハッシュをコミットする
  • CTRL-GCTRL-R- リモコン

redraw-current-linetmux を使用している場合は必要ありません。

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"'
于 2016-05-03T15:03:46.470 に答える
3

Windowsを使用している場合は、試してくださいgit checkout @(git branch -a | fzf).trim()

于 2020-05-23T11:16:07.640 に答える