-
Notifications
You must be signed in to change notification settings - Fork 228
/
neogit.txt
1700 lines (1358 loc) · 71.3 KB
/
neogit.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
*neogit.txt* A Magit inspired Git porcelain for Neovim
*neogit*
Original Author: TimUntersberger
Current Author: Cameron Kolkey <cameron.kolkey@gmail.com>
Homepage: <https://github.com/NeogitOrg/neogit>
License: MIT license
==============================================================================
CONTENTS *neogit_contents*
1. Intro |neogit_intro|
2. Setup *neogit_setup*
• Plugin Setup |neogit_setup_plugin|
• Mappings |neogit_setup_mappings|
• GPG Integration |neogit_setup_gpg|
3. Commands |neogit_commands|
4. Events |neogit_events|
5. Highlights |neogit_highlights|
6. API |neogit_api|
7. Usage |neogit_usage|
8. Popups *neogit_popups*
• Bisect |neogit_bisect_popup|
• Branch |neogit_branch_popup|
• Branch Config |neogit_branch_config_popup|
• Cherry Pick |neogit_cherry_pick_popup|
• Commit |neogit_commit_popup|
• Diff |neogit_diff_popup|
• Fetch |neogit_fetch_popup|
• Ignore |neogit_ignore_popup|
• Log |neogit_log_popup|
• Merge |neogit_merge_popup|
• Pull |neogit_pull_popup|
• Push |neogit_push_popup|
• Rebase |neogit_rebase_popup|
• Remote |neogit_remote_popup|
• Remote Config |neogit_remote_config_popup|
• Reset |neogit_reset_popup|
• Revert |neogit_revert_popup|
• Stash |neogit_stash_popup|
• Tag |neogit_tag_popup|
• Worktree |neogit_worktree_popup|
9. Buffers *neogit_buffers*
• Status |neogit_status_buffer|
• Editor |neogit_editor_buffer|
• Log |neogit_log_buffer|
• Reflog |neogit_reflog_buffer|
• Refs |neogit_refs_buffer|
• Commit |neogit_commit_buffer|
• Rebase Todo |neogit_rebase_todo_buffer|
==============================================================================
1. Intro *neogit_intro*
Neogit is a git client for Neovim built as a clone of the popular emacs git
client 'Magit'.
"Magit is a complete text-based user interface to Git. It fills the glaring
gap between the Git command-line interface and various GUIs, letting you
perform trivial as well as elaborate version control tasks with just a couple
of mnemonic key presses. Magit looks like a prettified version of what you get
after running a few Git commands but in Magit every bit of visible information
is also actionable to an extent that goes far beyond what any Git GUI provides
and it takes care of automatically refreshing this output when it becomes
outdated. In the background Magit just runs Git commands and if you wish you
can see what exactly is being run, making it possible for you to learn the git
command-line by using Magit.
Using Magit for a while will make you a more effective version control user.
Magit supports and streamlines the use of Git features that most users and
developers of other Git clients apparently thought could not be reasonably
mapped to a non-command-line interface. Magit is both faster and more
intuitive than either the command line or any GUI and these holds for both
Git beginners and experts alike."
- https://magit.vc/
Though not yet feature complete, our goal is to bring the Magit git experience
to Neovim users.
==============================================================================
2. Plugin Setup *neogit_setup_plugin*
TODO: Detail what these do
use_default_keymaps = true,
disable_hint = false,
disable_context_highlighting = false,
disable_signs = false,
graph_style = "ascii",
filewatcher = {
enabled = true,
},
telescope_sorter = function()
return nil
end,
git_services = {
["github.com"] = "https://github.com/${owner}/${repository}/compare/${branch_name}?expand=1",
["bitbucket.org"] = "https://bitbucket.org/${owner}/${repository}/pull-requests/new?source=${branch_name}&t=1",
["gitlab.com"] = "https://gitlab.com/${owner}/${repository}/merge_requests/new?merge_request[source_branch]=${branch_name}",
["azure.com"] = "https://dev.azure.com/${owner}/_git/${repository}/pullrequestcreate?sourceRef=${branch_name}&targetRef=${target}",
},
highlight = {
italic = true,
bold = true,
underline = true,
},
disable_insert_on_commit = "auto",
use_per_project_settings = true,
show_head_commit_hash = true,
remember_settings = true,
fetch_after_checkout = false,
auto_refresh = true,
sort_branches = "-committerdate",
kind = "tab",
disable_line_numbers = true,
-- The time after which an output console is shown for slow running commands
console_timeout = 2000,
-- Automatically show console if a command takes more than console_timeout milliseconds
auto_show_console = true,
notification_icon = "",
status = {
recent_commit_count = 10,
HEAD_folded = false,
},
commit_editor = {
kind = "tab",
},
commit_select_view = {
kind = "tab",
},
commit_view = {
kind = "vsplit",
verify_commit = vim.fn.executable("gpg") == 1,
},
log_view = {
kind = "tab",
},
rebase_editor = {
kind = "auto",
},
reflog_view = {
kind = "tab",
},
merge_editor = {
kind = "auto",
},
description_editor = {
kind = "auto",
},
tag_editor = {
kind = "auto",
},
preview_buffer = {
kind = "split",
},
popup = {
kind = "split",
},
refs_view = {
kind = "tab",
},
signs = {
hunk = { "", "" },
item = { ">", "v" },
section = { ">", "v" },
},
integrations = {
telescope = nil,
diffview = nil,
fzf_lua = nil,
mini_pick = nil,
},
sections = {
sequencer = {
folded = false,
hidden = false,
},
bisect = {
folded = false,
hidden = false,
},
untracked = {
folded = false,
hidden = false,
},
unstaged = {
folded = false,
hidden = false,
},
staged = {
folded = false,
hidden = false,
},
stashes = {
folded = true,
hidden = false,
},
unpulled_upstream = {
folded = true,
hidden = false,
},
unmerged_upstream = {
folded = false,
hidden = false,
},
unpulled_pushRemote = {
folded = true,
hidden = false,
},
unmerged_pushRemote = {
folded = false,
hidden = false,
},
recent = {
folded = true,
hidden = false,
},
rebase = {
folded = true,
hidden = false,
},
},
ignored_settings = {
"NeogitPushPopup--force-with-lease",
"NeogitPushPopup--force",
"NeogitPullPopup--rebase",
"NeogitCommitPopup--allow-empty",
}
==============================================================================
Commit Signing / GPG Integration *neogit_setup_gpg*
If you sign commits using gnugpg, there are a few steps that need to be taken
to properly integrate the password authentication with Neogit:
>gpg
# ~/.gnupg/gpg-agent.conf
pinentry-program /opt/homebrew/bin/pinentry-tty
allow-loopback-pinentry
<
>gpg
# ~/.gnupg/gpg.conf
pinentry-mode loopback
<
Note: If you are not using Homebrew you may need to change the path for
`pinentry-program
Note: The location of these config files may not be in "~/.gnupg/" depending
on your system configuration. To find where they should be placed run
"gpgconf --list-dirs" and place them in the path which follows the
line starting "homedir:". For example this could be
"$XDG_DATA_HOME/gnupg/"
==============================================================================
Mappings *neogit_setup_mappings*
The following mappings can all be customized via the setup function.
>lua
commit_editor = {
["q"] = "Close",
["<m-p>"] = "PrevMessage",
["<m-n>"] = "NextMessage",
["<m-r>"] = "ResetMessage",
["<c-c><c-c>"] = "Submit",
["<c-c><c-k>"] = "Abort",
}
commit_editor_I = {
["<c-c><c-c>"] = "Submit",
["<c-c><c-k>"] = "Abort",
}
rebase_editor = {
["p"] = "Pick",
["r"] = "Reword",
["e"] = "Edit",
["s"] = "Squash",
["f"] = "Fixup",
["x"] = "Execute",
["d"] = "Drop",
["b"] = "Break",
["q"] = "Close",
["<cr>"] = "OpenCommit",
["gk"] = "MoveUp",
["gj"] = "MoveDown",
["<c-c><c-c>"] = "Submit",
["<c-c><c-k>"] = "Abort",
["[c"] = "OpenOrScrollUp",
["]c"] = "OpenOrScrollDown",
}
rebase_editor_I = {
["<c-c><c-c>"] = "Submit",
["<c-c><c-k>"] = "Abort",
}
finder = {
["<cr>"] = "Select",
["<c-c>"] = "Close",
["<esc>"] = "Close",
["<c-n>"] = "Next",
["<c-p>"] = "Previous",
["<down>"] = "Next",
["<up>"] = "Previous",
["<tab>"] = "MultiselectToggleNext",
["<s-tab>"] = "MultiselectTogglePrevious",
}
popup = {
["?"] = "HelpPopup",
["A"] = "CherryPickPopup",
["B"] = "BisectPopup",
["b"] = "BranchPopup",
["c"] = "CommitPopup",
["d"] = "DiffPopup",
["f"] = "FetchPopup",
["i"] = "IgnorePopup",
["l"] = "LogPopup",
["m"] = "MergePopup",
["M"] = "RemotePopup",
["p"] = "PullPopup",
["P"] = "PushPopup",
["r"] = "RebasePopup",
["t"] = "TagPopup",
["v"] = "RevertPopup",
["w"] = "WorktreePopup",
["X"] = "ResetPopup",
["Z"] = "StashPopup",
}
status = {
["q"] = "Close",
["I"] = "InitRepo",
["1"] = "Depth1",
["2"] = "Depth2",
["3"] = "Depth3",
["4"] = "Depth4",
["<tab>"] = "Toggle",
["x"] = "Discard",
["s"] = "Stage",
["S"] = "StageUnstaged",
["<c-s>"] = "StageAll",
["u"] = "Unstage",
["U"] = "UnstageStaged",
["y"] = "ShowRefs",
["$"] = "CommandHistory",
["#"] = "Console",
["Y"] = "YankSelected",
["<c-r>"] = "RefreshBuffer",
["<cr>"] = "GoToFile",
["<c-v>"] = "VSplitOpen",
["<c-x>"] = "SplitOpen",
["<c-t>"] = "TabOpen",
["{"] = "GoToPreviousHunkHeader",
["}"] = "GoToNextHunkHeader",
["[c"] = "OpenOrScrollUp",
["]c"] = "OpenOrScrollDown",
}
<
==============================================================================
3. Commands *neogit_commands*
*:Neogit*
:Neogit In a Git repository, opens a new NeogitStatus tab.
*:NeogitResetState*
:NeogitResetState Performs a full reset of saved flags for all popups.
==============================================================================
4. Events *neogit_events*
(TODO)
==============================================================================
5. Highlights *neogit_highlights*
The following highlight groups are defined by this plugin. If you set any of
these yourself before the plugin loads, that will be respected. If they do not
exist, they will be created with sensible defaults based on your colorscheme.
STATUS BUFFER
NeogitBranch Local branches
NeogitBranchHead Accent highlight for current HEAD in LogBuffer
NeogitRemote Remote branches
NeogitObjectId Object's SHA hash
NeogitStash Stash name
NeogitFold Folded text highlight
NeogitRebaseDone Current position within rebase
NeogitTagName Closest Tag name
NeogitTagDistance Number of commits between the tag and HEAD
NeogitStatusHEAD The left text in the HEAD section
STATUS BUFFER SECTION HEADERS
NeogitSectionHeader
NeogitUnpushedTo Linked to NeogitSectionHeader
NeogitUnmergedInto ^
NeogitUnpulledFrom ^
NeogitUntrackedfiles ^
NeogitUnstagedchanges ^
NeogitUnmergedchanges ^
NeogitUnpushedchanges ^
NeogitUnpulledchanges ^
NeogitRecentcommits ^
NeogitStagedchanges ^
NeogitStashes ^
NeogitRebasing ^
NeogitReverting ^
NeogitPicking ^
NeogitMerging ^
NeogitBisecting ^
NeogitSectionHeaderCount The number, for sections with a number.
STATUS BUFFER FILE
Applied to the label on the left of filenames. These highlight groups are not
used directly, but linked to by other groups:
NeogitChangeModified
NeogitChangeAdded
NeogitChangeDeleted
NeogitChangeRenamed
NeogitChangeUpdated
NeogitChangeCopied
NeogitChangeNewFile
NeogitChangeUnmerged
Styling one of the above groups will apply to all sections, and is generally
whats recommended. However, if you want to control the style on a per-section
basis, the _actual_ highlight groups on the labels follow this pattern:
`NeogitChange<mode><section>`
Where `<mode>` is one of: (corrospinding to the git mode)
M
A
N
D
C
U
R
DD
UU
AA
DU
UD
AU
UA
And `<section>` is one of:
untracked
unstaged
staged
So, a modified and staged change would use the `NeogitChangeMstaged` highlight
group, which is linked to `NeogitChangeModified` by default.
SIGNS FOR LINE HIGHLIGHTING
Used to highlight different sections of the status buffer or commit buffer.
NeogitHunkHeader
NeogitDiffContext
NeogitDiffAdd
NeogitDiffDelete
NeogitDiffHeader
SIGNS FOR LINE HIGHLIGHTING CURRENT CONTEXT
These are essentially an accented version of the above highlight groups. Only
applies to the current context the cursor is within.
The "Cursor" suffix applies only to the Cursor line
NeogitHunkHeaderHighlight
NeogitDiffContextHighlight
NeogitDiffAddHighlight
NeogitDiffDeleteHighlight
NeogitDiffHeaderHighlight
NeogitHunkHeaderCursor
NeogitDiffContextCursor
NeogitDiffAddCursor
NeogitDiffDeleteCursor
NeogitDiffHeaderCursor
COMMIT BUFFER
NeogitFilePath Applied to filepath
NeogitCommitViewHeader Applied to header of Commit View
LOG VIEW BUFFER
NeogitGraphAuthor Applied to the commit's author in graph view
NeogitGraphBlack Used when --colors is enabled for graph
NeogitGraphBlackBold
NeogitGraphRed
NeogitGraphRedBold
NeogitGraphGreen
NeogitGraphGreenBold
NeogitGraphYellow
NeogitGraphYellowBold
NeogitGraphBlue
NeogitGraphBlueBold
NeogitGraphPurple
NeogitGraphPurpleBold
NeogitGraphCyan
NeogitGraphCyanBold
NeogitGraphWhite
NeogitGraphWhiteBold
NeogitGraphGray
NeogitGraphBoldGray
NeogitGraphOrange
NeogitSignatureGood For highlighting the commit hash when
NeogitSignatureBad --show-signature is passed
NeogitSignatureMissing
NeogitSignatureNone
NeogitSignatureGoodUnknown
NeogitSignatureGoodExpired
NeogitSignatureGoodExpiredKey
NeogitSignatureGoodRevokedKey
POPUPS
NeogitPopupSectionTitle Applied to all section headers
NeogitPopupBranchName Applied to the current branch name for emphasis
NeogitPopupBold Applied on "@{upstream}" and "pushRemote" for
emphasis (but less emphasis than BranchName)
NeogitPopupSwitchKey Applied to the key that will toggle switch
NeogitPopupSwitchEnabled Applied to the flag if enabled
NeogitPopupSwitchDisabled Applied to the flag if disabled
NeogitPopupOptionKey Applied to the key that will trigger option
NeogitPopupOptionEnabled Applied if option is set
NeogitPopupOptionDisabled Applied if option has no value
NeogitPopupConfigKey Applied to the key that triggers config
NeogitPopupConfigEnabled Applied to enabled config value
NeogitPopupConfigDisabled Applied to config without value
NeogitPopupActionKey Applied to key that triggers function
NeogitPopupActionDisabled Applied to key when function is unimplemented
COMMAND HISTORY BUFFER
NeogitCommandText Git command that was run
NeogitCommandTime Execution time
NeogitCommandCodeNormal Applied to a successful command's exit status (0)
NeogitCommandCodeError When command exits with non-zero status
COMMIT SELECT BUFFER
NeogitFloatHeader Foreground/Background for header text at top of win
NeogitFloatHeaderHighlight Emphasized text in header
==============================================================================
6. Lua API *neogit_api* *neogit-lua*
neogit.open({*opts}) *neogit.open()*
Open Neogit. Alternative to `:Neogit` >lua
local neogit = require('neogit')
-- open using defaults
neogit.open()
-- open commit popup
neogit.open({ "commit" })
-- open with split kind
neogit.open({ kind = "split" })
-- open home directory
neogit.open({ cwd = "~" })
<
Parameters:
• {opts} (table|nil)
• kind (string) optional: How to open Neogit.
- "tab" (default) like :tab split
- "replace" like :enew
- "split" like :below split
- "split_above" like :top split
- "vsplit" like :vsplit
- "vsplit_left" like :vsplit, but open to the left
- "floating" not-yet-implemented
• cwd (string) optional: Path to git repository.
default: |current-directory|.
• no_expand (boolean) optional: Set to true to
prevent the calling of `expand()` on the path.
• [1] (string) optional: Name of the Neogit
popup to open. See |neogit-popups|.
neogit.action({popup}, {action}, {args}) *neogit.action()*
Call an action without going through the popup interface.
Note: Some actions might not play nicely when being invoked this way.
You've been warned. >lua
local neogit = require('neogit')
-- Calls the "commit" action from the "commit" popup, with arguments
vim.keymap.set(
'n',
'<leader>gcc',
neogit.action('commit', 'commit', { '--verbose', '--all' })
)
<
Parameters:
• {popup} (string)
Name of popup, as found in `lua/neogit/popups/*`
• {action} (string)
Name of action for popup, found in `lua/neogit/popups/*/actions.lua`
• {args} (table|nil)
CLI arguments to pass to git command
==============================================================================
7. Usage *neogit_usage*
(TODO)
==============================================================================
Bisect Popup *neogit_bisect_popup*
(TODO)
==============================================================================
Cherry-Pick Popup *neogit_cherry_pick_popup*
Arguments: *neogit_cherry_pick_popup_args*
• --ff
If the current HEAD is the same as the parent of the cherry-pick’ed
commit, then a fast forward to this commit will be performed.
Actions: *neogit_cherry_pick_popup_actions*
Actions for the branch popup are split into two categories: "Apply here",
and "Apply elsewhere". The former will update the current HEAD, whereas the
latter will prompt for a target.
When a Cherry-Pick isn't in progress, the following actions are available:
• Pick *neogit_cherry_pick_pick*
This command copies COMMITS from another branch onto the current branch.
If a commit is under the cursor, or multiple commits are selected, then
those are used instead of prompting. Otherwise the user is prompted to
select one or more commits.
• Apply *neogit_cherry_pick_apply*
This command applies the changes in COMMITS from another branch onto the
current branch, without committing. If a commit is under the cursor, or
multiple commits are selected, then those are used instead of prompting.
Otherwise the user is prompted to select one or more commits.
• Harvest *neogit_cherry_pick_harvest*
(Not yet implemented)
• Squash *neogit_cherry_pick_squash*
(Not yet implemented)
• Donate *neogit_cherry_pick_donate*
(Not yet implemented)
• Spinout *neogit_cherry_pick_spinout*
(Not yet implemented)
• Spinoff *neogit_cherry_pick_spinoff*
(Not yet implemented)
When a Cherry-Pick is in progress, the following actions are available:
• Continue *neogit_cherry_pick_continue*
Resume current cherry-pick sequence.
• Skip *neogit_cherry_pick_skip*
Skip the current commit during a cherry-pick sequence.
• Abort *neogit_cherry_pick_abort*
Abort the current cherry-pick sequence. This discards all changes made.
==============================================================================
Branch Popup *neogit_branch_popup*
Variables: *neogit_branch_popup_variables*
• branch.<name>.description
Longform description of a branch.
• branch.<name>.merge, branch.<name>.remote
Together branch.<name>.merge and branch.<name>.remote define the upstream
branch for the given branch. It tells git fetch/git pull/git rebase which
branch to merge and can also affect git push. When in branch <name>, it
tells git fetch the default refspec to be marked for merging in
FETCH_HEAD.
The value is handled like the remote part of a refspec, and must match a
ref which is fetched from the remote given by "branch.<name>.remote".
The merge information is used by git pull (which first calls git fetch) to
lookup the default branch for merging. Without this option, git pull
defaults to merge the first refspec fetched. Specify multiple values to
get an octopus merge. If you wish to setup git pull so that it merges into
<name> from another branch in the local repository, you can point
branch.<name>.merge to the desired branch, and use the relative path
setting . (a period) for branch.<name>.remote.
• branch.<name>.rebase
Cycles branch.<name>.rebase value between true, false, and the value of
`pull.rebase`. When enabled, actions like pulling will attempt to rebase
by default.
• branch.<name>.pushRemote
Cycles pushRemote between the remotes currently configured for the
repository. `remote.pushDefault` will be offered, if set.
Arguments: *neogit_branch_popup_args*
• --recurse-submodules
(EXPERIMENTAL) Causes the current command to recurse into submodules if
submodule.propagateBranches is enabled.
When used in branch creation, a new branch <branchname> will be created
in the superproject and all of the submodules in the superproject’s
<start-point>. In submodules, the branch will point to the submodule
commit in the superproject’s <start-point> but the branch’s tracking
information will be set up based on the submodule’s branches and remotes
e.g. git branch --recurse-submodules topic origin/main will create the
submodule branch "topic" that points to the submodule commit in the
superproject’s "origin/main", but tracks the submodule’s "origin/main".
Actions: *neogit_branch_popup_actions*
Actions for the branch popup are split into three categories: "Checkout",
"Create", and "Do". They behave as described: "Checkout" actions will change
your HEAD when checking out the selected/created branch. "Create" actions,
by contrast, will _not_ change HEAD.
Finally, "Do" actions provide some common housekeeping actions.
• Checkout branch/revision *neogit_branch_checkout_rev*
Changes HEAD to point to the selected branch/revision. If a local branch
is selected, that will be checked out. Otherwise HEAD will become
detached. Any ref under the cursor or selected will be available to
checkout.
• Checkout local branch *neogit_branch_checkout_local*
Changes HEAD to point to the selected branch. Also lists branches on
remotes that do not have a matching branch locally. If a remote branch is
selected, then a local branch is created tracking the selected remote
branch.
• Checkout recent branch *neogit_branch_checkout_recent*
Changes HEAD to point to the selected branch. Branches are listed by how
recently they have been checked out. Only local branches are considered.
• Checkout new branch *neogit_branch_checkout_new*
Creates and switches HEAD to a new branch. Any whitespace in the branch
name will be automatically changed to '-'.
For example, entering "new branch name" will result in a branch called
"new-branch-name" being created.
After entering a name, you will be prompted to choose a base branch for
the branch being created. The current branch will be at the top of the
list, but any branch can be chosen.
• Checkout new spin-off *neogit_branch_spin_off*
This command creates and checks out a new branch starting at and tracking
the current branch. That branch in turn is reset to the last commit it
shares with its upstream. If the current branch has no upstream or no
unpushed commits, then the new branch is created anyway and the previously
current branch is not touched.
This is useful to create a feature branch after work has already began on
the old branch.
• Checkout new worktree *neogit_branch_checkout_worktree*
(Not yet implemented)
• Create new branch *neogit_branch_create_branch*
Functionally the same as |neogit_branch_checkout_new|, but does not update
HEAD.
• Create new spin-out *neogit_branch_spin_out*
Like |neogit_branch_spin_off|, but doesn't change HEAD. However, if the
index has uncommitted changes, will behave exactly the same as spin_off.
• Create new worktree *neogit_branch_create_worktree*
(Not yet implemented)
• Configure *neogit_branch_configure*
Opens selector to choose a branch, then offering some configuration
options. See |neogit_branch_config_popup|.
• Rename *neogit_branch_rename*
Opens selector to choose a branch to rename. Like with a new branch, any
whitespace will be replaced with '-'.
• Reset *neogit_branch_reset*
Resets the current branch to the the selected branch via a hard reset.
Uncommitted changes will be lost in the process.
• Delete *neogit_branch_delete*
Opens selector, allowing the user to delete either a local or remote
branch.
• Pull Request *neogit_branch_pull_request*
When a branch has an upstream configured, can be used to open a
pull-request on the git services' website. By default, supports github,
gitlab, and bitbucket, but more can be added via config.git_services.
==============================================================================
Branch Config Popup *neogit_branch_config_popup*
Allows configuring some common config settings for the selected branch, as
well as some repository defaults.
Branch:
• branch.<name>.description *neogit_branch_config_description*
Branch description is automatically added in the format-patch cover letter
or request-pull summary.
• branch.<name>.merge *neogit_branch_config_merge*
Defines, together with branch.<name>.remote, the upstream branch for the
given branch. It tells git fetch/git pull/git rebase which branch to merge
and can also affect git push (see push.default). When in branch <name>,
it tells git fetch the default refspec to be marked for merging in
FETCH_HEAD. The value is handled like the remote part of a refspec, and
must match a ref which is fetched from the remote given by
"branch.<name>.remote".
The merge information is used by git pull (which at first calls git fetch)
to lookup the default branch for merging.
Without this option, git pull defaults to merge the first refspec fetched.
Specify multiple values to get an octopus merge. If you wish to setup git
pull so that it merges into <name> from another branch in the local
repository, you can point branch.<name>.merge to the desired branch, and
use the relative path setting . (a period) for branch.<name>.remote.
• branch.<name>.remote *neogit_branch_config_remote*
When on branch <name>, it tells git fetch and git push which remote to
fetch from/push to. The remote to push to may be overridden with
remote.pushDefault (for all branches). The remote to push to, for the
current branch, may be further overridden by branch.<name>.pushRemote. If
no remote is configured, or if you are not on any branch and there is more
than one remote defined in the repository, it defaults to origin for
fetching and remote.pushDefault for pushing. Additionally, . (a period) is
the current local repository (a dot-repository), see branch.<name>.merge's
final note below.
• branch.<name>.rebase *neogit_branch_config_rebase*
When true, rebase the branch <name> on top of the fetched branch, instead
of merging the default branch from the default remote when "git pull" is
run. See "pull.rebase" for doing this in a non branch-specific manner.
NOTE: this is a possibly dangerous operation; do not use it unless you
understand the implications (see git-rebase(1) for details).
• branch.<name>.pushRemote *neogit_branch_config_pushRemote*
When on branch <name>, it overrides branch.<name>.remote for pushing. It
also overrides remote.pushDefault for pushing from branch <name>. When you
pull from one place (e.g. your upstream) and push to another place (e.g.
your own publishing repository), you would want to set remote.pushDefault
to specify the remote to push to for all branches, and use this option to
override it for a specific branch.
Repository defaults:
• pull.rebase *neogit_branch_config_pull_rebase*
When true, rebase branches on top of the fetched branch, instead of
merging the default branch from the default remote when "git pull" is run.
Use "branch.<name>.rebase" for setting this on a per-branch basis.
NOTE: this is a possibly dangerous operation; do not use it unless you
understand the implications (see git-rebase[1] for details).
• remote.pushDefault *neogit_branch_config_remote_pushDefault*
The remote to push to by default. Overrides branch.<name>.remote for all
branches, and is overridden by branch.<name>.pushRemote for specific
branches.
• neogit.baseBranch *neogit_branch_config_baseBranch*
If set, will be used by "rebase onto base" action. Otherwise defaults to
either "main" or "master", depending on which is found.
• neogit.askSetPushDefault *neogit_branch_config_askSetPushDefault*
This option controls whether the user is asked whether they want to set
remote.pushDefault after adding a remote.
When set to 'ask', the user is always asked.
When 'ask-if-unset', the user is only asked if the variable isn’t set.
(This is also the default behaviour when unset.)
When 'never', the user isn’t asked and the variable isn’t set.
Branch creation:
• branch.autoSetupMerge *neogit_branch_config_autoSetupMerge*
Tells git branch, git switch and git checkout to set up new branches so
that git-pull(1) will appropriately merge from the starting point branch.
false — No automatic setup is done.
true — Automatic setup is done when the starting point is a
remote-tracking branch.
always — Automatic setup is done when the starting point is either a
local branch or remote-tracking branch.
inherit — If the starting point has a tracking configuration, it is copied
to the new branch.
simple — Automatic setup is done only when the starting point is a
remote-tracking branch and the new branch has the same name as
the remote branch.
This option defaults to true.
• branch.autoSetupRebase *neogit_branch_config_autoSetupRebase*
When a new branch is created with git branch, git switch or git checkout
that tracks another branch, this variable tells Git to set up pull to
rebase instead of merge (see "branch.<name>.rebase").
never - Rebase is never automatically set to true.
local - Rebase is set to true for tracked branches of other local
branches.
remote - Rebase is set to true for tracked branches of remote-tracking
branches.
always - Rebase will be set to true for all tracking branches.
See "branch.autoSetupMerge" for details on how to set up a branch to track
another branch.
This option defaults to never.
==============================================================================
Commit Popup *neogit_commit_popup*
Arguments: *neogit_commit_popup_args*
• --all
Tell the command to automatically stage files that have been modified and
deleted, but new files you have not told Git about are not affected.
• --allow-empty
Usually recording a commit that has the exact same tree as its sole parent
commit is a mistake, and the command prevents you from making such a
commit. This option bypasses the safety, and is primarily for use by
foreign SCM interface scripts.
• --verbose
Show unified diff between the HEAD commit and what would be committed at
the bottom of the commit message template to help the user describe the
commit by reminding what changes the commit has. Note that this diff
output doesn’t have its lines prefixed with #. This diff will not be a
part of the commit message. See the `commit.verbose` configuration variable
in git-config(1).
• --no-verify
Skip any pre-commit or commit-msg hooks. See also githooks(5).
• --signoff
Add a Signed-off-by trailer by the committer at the end of the commit log
message. The meaning of a signoff depends on the project to which you’re
committing. For example, it may certify that the committer has the rights
to submit the work under the project’s license or agrees to some
contributor representation, such as a Developer Certificate of Origin.
See http://developercertificate.org for the one used by the Linux kernel
and Git projects.
Consult the documentation or leadership of the project to which you’re
contributing to understand how the signoffs are used in that project.
• --no-gpg-sign
This is useful to countermand both commit.gpgSign configuration variable,
and --gpg-sign
• --reset-author
When used while amending or when committing after a conflicting
cherry-pick, declare that the authorship of the resulting commit now
belongs to the committer. This also renews the author timestamp.
• --author=
Override the commit author. Specify an explicit author using the standard
A U Thor <author@example.com> format. Otherwise <author> is assumed to be
a pattern and is used to search for an existing commit by that author
(i.e. rev-list --all -i --author=<author>); the commit author is then
copied from the first such commit found.
• --gpg-sign=
GPG-sign commits. The argument should be the keyid is optional and
defaults to the committer identity,
• --reuse-message=
Take an existing commit object, and reuse the log message and the
authorship information (including the timestamp) when creating the commit.
Actions: *neogit_commit_popup_actions*
Actions in the commit popup are in three groups: "Create", "Edit HEAD", and
"Edit". The first should be somewhat self explanatory - you can create a new
commit from your staged changes. "Edit HEAD" actions will modify the current
commit HEAD is pointing at, and "Edit" will modify commits that your HEAD
isn't pointing to.
• Create Commit *neogit_commit_create*
Creates a new commit on the current branch from the currently staged
changes.
• Absorb *neogit_commit_absorb*