Notes on Git Better with Vim by VimTricks.
Chapter 2: “Core git operations”
Requires tpope/vim-fugitive
:Gread- Reset the file to the last checked-in version:Gread main:%- Reset the file to the version onmain:G commit- Create a commit and split open a new buffer to enter a commit message:G commit -m "Message here"- Create a commit with a single-line message
Chapter 3: “Staging diffs with Vim”
From the :G window…
)- go to next file or hunk (if inline file diff open)(- go to previous file or hunk (if inline file diff open)v + movement(s)- select range from hunk to stage (no minimum range)shift-V + j/k- select lines from hunk to stage (must select at least 2 lines)=- toggle open or close the inline diff-- toggle staging of a file or hunks- stage of a file or hunkS- stage all filesu- unstage file or hunkU- unstage all filesX- discard the changes to the hunk or file under your cursor (be careful!)
Chapter 4: “Visually staging diffs”
:G+ddon a file - view diff with working tree on the right/bottom (:Gdiffsplit)- split will be vertical or horizontal depending on space
- force vertical with
dvinstead
:Gdiffsplitfrom within the file itself - view diff with working tree on the right- force a vertical diff with
:Gvdiffsplit
- force a vertical diff with
- In the two-way diff…
]c- jump to the next change[c- jump to the previous changedo- “obtain” the corresponding change from the opposite window- in working tree window, this discards the change
dp- “put” the change under the cursor into the opposite window- in working tree window, this keeps the change
:wq- save and close the diff windows to stage the resulting change
Chapter 5: “Committing”
From the :G window…
cvc- commit while viewing the diff I’m committing in the commit windowca- amend the last commit and edit the messagece- amend the last commit with the “existing” messagecw- change the wording of the last commitc-space- populate the command line with:Git commitso I can construct a custom command
Chapter 12: “Conflict resolution”
From the :G window when there is a merge conflict…
dd/dv- will open to a 3-way split:- left/top (buffer
2) - the currently checked out branch (”ours”) - middle (buffer
1) - the working version where the resolved conflicts go - right/bottom (buffer
3) - the branch I’m merging into the current branch (”theirs”)
- left/top (buffer
From the 3-way split view…
- To keep everything from the left/top or right/bottom version:
- Move cursor to the buffer with the changes you want to keep
- Run
:Gwrite!
- To select changes from both sides…
- Stay in the middle window (buffer
1) ]c- jump to the next conflict[c- jump to the previous conflict
- Stay in the middle window (buffer
- When the cursor is on a conflict…
d2o- “obtain” the version from buffer2(”diff two obtain”)d3o- “obtain” the version from buffer3(”diff three obtain”)
Chapter 18: “Connecting Vim to the Web”
Requires X plugin
:GBrowse- open the file or selected lines in the browser:GBrowse!- copy a link to the file or selected lines:GBrowse master...your_branch- open diff between two branches in the browser:GBrowse some_commit...another_commit- open diff between any two commits in the browser (same as above)
Chapter 19: “History Visualization”
Requires X plugin
:GV- list previous commits to current branch in new tab- useful for PR re-reviews?
:GV!- list previous commits to current file in new tab- From the
GV/GV!tab…oor<cr>- open the selected commits in the right paneO- open the selected commits in a new tabgb- open commit under cursor in the browser- From the commit detail window…
]n- jump to next hunk[n- jump to previous hunk
- The ULTIMATE Git workflow using Neovim’s Fugitive, Telescope & Git-Signs! - git workflow with vim-fugitive + git-signs + telescope - DevOps Toolbox
- Resolve Git Merge Conflicts with Neovim and Fugitive! - merge conflict workflow using git-fugitive’s 3-way diff view - DevOps Toolbox