VSCode で Git を爆速ショートカットする方法

どうもNeoVimとVSCodeを割と両方使ってるものです。
VSCodeは仕事で使っているのですが、やはりある程度GUI寄りということでデフォルトちょうどいい感じのショートカットが設定されていません。

今回なるべく速く基本的なGit操作を行う方法を考えてみたためご紹介します。

VSCodeの設定紹介 + fzfの紹介になります

目次

環境

  • VSCode version 1.6.2

拡張機能

  • Gitlens
  • VSCode Vim
  • fzf

ファイル操作

まず一番基本的な操作のGit add, Git commit, Git pushあたりはGitlensのショートカットを割り当てるだけで割と問題は解決します。

Git操作管理マネージャーに移動

settings jsonにGit scm(Git操作管理マネージャー)に移動するショートカットを割り当てます

  "vim.normalModeKeyBindings": [
    {
      "before": ["<leader>", "f", "g", "s"],
      "commands": ["workbench.view.scm"]
    }
  ],

Add, Commit, Push

keybindins.jsonに
Git add, Git commit, Git pushを実施するショートカットを割り当てます。

  {
    "key": "ctrl+a",
    "command": "git.stageAll",
    "when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
  },
  {
    "key": "ctrl+c",
    "command": "git.commitStaged",
    "when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
  },
  {
    "key": "shift+p",
    "command": "git.push",
    "when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
  },

上記の設定で

  • f g s でscmに移動
  • <ctrl-a>で全てGit add
  • <ctrl-c>でコミット+コミットメッセージ書き込み
  • <shift-p>でpush

の4操作で完結することができます。

Diff、Unstage

その他にもファイルごとにstageする設定や、ファイルの差分を確認するショートカットは以下で設定可能です。

  {
    "key": "a",
    "command": "git.stage",
    "when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
  },
  {
    "key": "space",
    "command": "list.selectAndPreserveFocus",
    "when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
  },
  {
    "key": "ctrl+u",
    "command": "git.unstageAll",
    "when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
  },

Pull

Git pullについては、普通にコマンドを打つのが一番融通が聞くかなと思います。

git pull

上記コマンドで対応し、origin 以外のupstreamなど追加で必要であれば随時追加していくという形で良いかなと思います。

Stash, Apply

Stash, Applyについてはおそらくaliasを使用し、コマンドを打つのが一番早いだろうと考えます。

alias gst="git stash save"
alias gstp="git stash pop"
alias gstl="git stash list"

特定の過去のstashを検索してpopする場合には下記のfst関数を.zshrc(or bash_profile)に記載すると良いかなと思います。

# Git Stash pop
fst() {
  local stash
  stashes=$(git stash list) &&
  stash=$(echo "$stashes" | fzf -m) &&
  git stash pop $(echo "$stash" | awk '{print $1}' | sed "s/://")
}

ブランチ操作

Create Branch

おそらくブランチの作成はVSCode Action(ctrl+shift+p)で表示される、「Git:Create Branch」が良い選択肢かなと思いました。

ただブランチの作成に関しては自分はgit checkout -bにaliasをzshrcの設定で書き込んでいるため、もしかしたらコマンドを打つ方が若干早いかもしれません。

.zshrc(or bash_profile)に以下を追加

alias gcb="git checkout -b"

Delete Branch

ブランチ削除についてもVSCode Actionsでの「Git:Delete Branch」が良いかなと思ったのですが、これだと複数のブランチ削除ができないためにちょっと使い勝手が良くないかなと思いました。

そこで私は、git branchで表示されるものをfzfで検索し、選択したものをgit branch -d として渡すようにbashに設定いたしました。

自分としては以下が一番使い勝手が良いかなと思いました。

zshrc(or bashrc)に以下を追加

# Git delete branch
fbrad() {
  local branches branch
  branches=$(git --no-pager branch -vv) &&
  branch=$(echo "$branches" | fzf -m) &&
  git branch -d $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}

terminalでfbradと入力し、削除したいブランチをTabで選択したあとにEnterを押すことで複数ブランチの削除が可能になります。

Checkout

ブランチのcheckoutについては、VSCode Actionの「Git:Checkout to」で十分かなと思いました。

ちなみにfzf的な解法で言うと、以下のfbrコマンドでチェックアウトすることも可能です。

# Git Checkout
fbr() {
  local branches branch
  branches=$(git --no-pager branch -vv) &&
  branch=$(echo "$branches" | fzf +m) &&
  git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

数学科出身のSoftware Engineer
情報通信が好きなのでブログを活用して発信しています。

コメント

コメントする

目次
閉じる