Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

aaronhallaert/advanced-git-search.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

75 Commits

Repository files navigation

πŸƒ Advanced Git Search

An advanced git search extension for Telescope and fzf-lua.

Search your git history by commit message, content and author in Neovim

πŸš€ Usage

Demo

  • πŸ“– Open a picker

    :AdvancedGitSearch or :AdvancedGitSearch {command}

  • πŸ”Ž Enter a query

    Your usual search experience. See the individual commands for the grep behaviour.

  • ✏️ Further search on commit author with @

    The prompt is split on @. Everything following the @ is the pattern for the author name.

⚑️ Commands

1. search_log_content -- Search in repo log content

Opens a window with a list of all previous commit.

Grep behaviour: filter on added, updated or removed code (log content: -G option in git).

Keymaps

  • <CR> Opens a diff of the current file with the selected commit
  • <C-e> show the entire commit for all files in neovim with diff plugin
  • <C-o> Open the selected commit in the browser
  • <C-y> copy the commit hash to clipboard
  • <C-p> copy the commit patch for a single commit or a range to clipboard (currently telescope-only)
  • <C-w> cycle author, date and both in entry

2. search_log_content_file -- Search in file log content

Opens a window with a list of git commits that changed the current file (renames included).

Grep behaviour: filter on added, updated or removed code (log content: -G option in git).

Keymaps

  • <CR> Opens a diff of the current file with the selected commit
  • <C-e> show the entire commit for all files in neovim with diff plugin
  • <C-o> Open the selected commit in the browser
  • <C-y> copy the commit hash to clipboard
  • <C-p> copy the commit patch for a single commit or a range to clipboard (currently telescope-only)
  • <C-w> cycle author, date and both in entry

3. diff_commit_file -- Diff current file with commit

Opens a window with a list of git commits that changed the current file (renames included).

Grep behaviour: filter on commit message.

Keymaps

  • <CR> Opens a diff of the current file with the selected commit
  • <C-e> show the entire commit for all files in neovim with diff plugin
  • <C-o> Open the selected commit in the browser
  • <C-y> copy the commit hash to clipboard
  • <C-p> copy the commit patch for a single commit or a range to clipboard (currently telescope-only)
  • <C-w> cycle author, date and both in entry

4. diff_commit_line -- Diff current file with selected line history

Opens a window with a list of previous commit logs with respect to selected lines

Grep behaviour: filter on commit message.

Use :'<,'>AdvancedGitSearch diff_commit_line (with a visual range).

Keymaps

  • <CR> opens a diff for the current file with the corresponding file on the selected commit
  • <C-e> show the entire commit for all files in neovim with diff plugin
  • <C-o> opens a the selected commit in the browser
  • <C-y> copy the commit hash to clipboard
  • <C-p> copy the commit patch for a single commit or a range to clipboard (currently telescope-only)
  • <C-w> cycle author, date and both in entry

5. diff_branch_file -- Diff file with branch

Opens a window with a list of local branches

Grep behaviour: filter on branch name.

Keymaps

  • <CR> opens a diff for the current file with the selected branch

6. changed_on_branch -- Changed on current branch (experimental)

Opens a window with a list of changed files on the current branch (including staged files). The fork point of the current branch is determined with the following command:

git show-branch | \
 sed "s/].*//" | \
 grep "*" | \
 grep -v "$(git rev-parse --abbrev-ref HEAD)" | \
 head -n1 | \
 sed "s/^.*\\[//"

Note: this only works if there is already a commit on the current branch, otherwise the base branch can not be detected.

Grep behaviour: filter on filename.

Keymaps

  • <CR> opens the selected file.

7. checkout_reflog -- Checkout from reflog

Opens a window with all reflog entries

Keymaps

  • <CR> checkout the reflog entry

8. show_custom_functions

A telescope picker for all functions above. Enable show_builtin_git_pickers to additionally show builtin git pickers.

βš™οΈ Installation

Config

{
 -- Browse command to open commits in browser. Default fugitive GBrowse.
 -- {commit_hash} is the placeholder for the commit hash.
 browse_command = "GBrowse {commit_hash}",
 -- when {commit_hash} is not provided, the commit will be appended to the specified command seperated by a space
 -- browse_command = "GBrowse",
 -- => both will result in calling `:GBrowse commit`
 -- fugitive or diffview
 diff_plugin = "fugitive",
 -- customize git in previewer
 -- e.g. flags such as { "--no-pager" }, or { "-c", "delta.side-by-side=false" }
 git_flags = {},
 -- customize git diff in previewer
 -- e.g. flags such as { "--raw" }
 git_diff_flags = {},
 git_log_flags = {},
 -- Show builtin git pickers when executing "show_custom_functions" or :AdvancedGitSearch
 show_builtin_git_pickers = false,
 entry_default_author_or_date = "author", -- one of "author", "date" or "both"
 keymaps = {
 -- following keymaps can be overridden
 toggle_date_author = "<C-w>",
 open_commit_in_browser = "<C-o>",
 copy_commit_hash = "<C-y>",
 copy_commit_patch = "<C-p>", -- telescope only
 show_entire_commit = "<C-e>",
 }
 -- Telescope layout setup
 telescope_theme = {
 function_name_1 = {
 -- Theme options
 },
 function_name_2 = "dropdown"
 -- e.g. realistic example
 show_custom_functions = {
 layout_config = { width = 0.4, height = 0.4 },
 },
 }
}

Dependencies

{
 "nvim-telescope/telescope.nvim",
 -- to show diff splits and open commits in browser
 "tpope/vim-fugitive",
 -- to open commits in browser with fugitive
 "tpope/vim-rhubarb",
 -- optional: to replace the diff from fugitive with diffview.nvim
 -- (fugitive is still needed to open in browser)
 -- "sindrets/diffview.nvim",
}

Telescope

Lazy

To complete this snippet, see Config and Dependencies.

{
 "aaronhallaert/advanced-git-search.nvim",
 cmd = { "AdvancedGitSearch" },
 config = function()
 -- optional: setup telescope before loading the extension
 require("telescope").setup{
 -- move this to the place where you call the telescope setup function
 extensions = {
 advanced_git_search = {
 -- See Config
 }
 }
 }
 require("telescope").load_extension("advanced_git_search")
 end,
 dependencies = {
 --- See dependencies
 },
}
Packer

To complete this snippet, see Config and Dependencies.

use({
 "aaronhallaert/advanced-git-search.nvim",
 config = function()
 -- optional: setup telescope before loading the extension
 require("telescope").setup{
 -- move this to the place where you call the telescope setup function
 extensions = {
 advanced_git_search = {
 -- Insert Config here
 }
 }
 }
 require("telescope").load_extension("advanced_git_search")
 end,
 requires = {
 -- Insert Dependencies here
 },
})

Fzf-lua

Lazy

To complete this snippet, see Config and Dependencies.

{
 "aaronhallaert/advanced-git-search.nvim",
 cmd = { "AdvancedGitSearch" },
 config = function()
 require("advanced_git_search.fzf").setup{
 -- Insert Config here
 }
 end,
 dependencies = {
 -- Insert Dependencies here
 },
}
Packer

To complete this snippet, see Config and Dependencies.

use({
 "aaronhallaert/advanced-git-search.nvim",
 config = function()
 require("advanced_git_search.fzf").setup{
 -- Insert Config here
 }
 }
 end,
 requires = {
 -- Insert Dependencies here
 },
})

Snacks

Lazy

To complete this snippet, see Config and Dependencies. Also see lua/spec/minimal_init_snacks.lua for an up-to-date version.

{
 "aaronhallaert/advanced-git-search.nvim",
 cmd = { "AdvancedGitSearch" },
 config = function()
 require("advanced_git_search.snacks").setup{
 -- Insert Config here
 }
 end,
 dependencies = {
 "folke/snacks.nvim"
 },
}
Packer

To complete this snippet, see Config and Dependencies.

use({
 "aaronhallaert/advanced-git-search.nvim",
 config = function()
 require("advanced_git_search.snacks").setup{
 -- Insert Config here
 }
 }
 end,
 requires = {
 -- Insert Dependencies here
 },
})

Prerequisites

  • git
  • vim-fugitive
  • sindrets/diffview.nvim
  • telescope.nvim

About

Search your git history by commit message, content and author in Neovim

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /