gitwrap 0.11.0

GitWrap is a simple wrapper around `git` command
Documentation
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
[
  {
    "section": "pull",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-pull",
    "description": "Incorporates changes from a remote repository into the current branch.\nIf the current branch is behind the remote, then by default it will fast-forward the current branch to match the remote.\nIf the current branch and the remote have diverged, the user needs to specify how to reconcile the divergent branches with --rebase or --no-rebase",
    "options": [
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "This is passed to both underlying git-fetch to squelch reporting of during transfer, and underlying git-merge to squelch output during merging."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "Pass --verbose to git-fetch and git-merge."
      },
      {
        "argument": "--recurse-submodules[=yes|on-demand|no]",
        "arguments": "--recurse-submodules[=yes|on-demand|no]",
        "description": "This option controls if new commits of all populated submodules should be fetched too."
      },
      {
        "argument": "--no-recurse-submodules[=yes|on-demand|no]",
        "arguments": "--no-recurse-submodules[=yes|on-demand|no]",
        "description": "This option controls if new commits of all populated submodules should be fetched too."
      },
      {
        "argument": "--commit",
        "arguments": "--commit",
        "description": "Perform the merge and commit the result.\nThis option can be used to override --no-commit."
      },
      {
        "argument": "--no-commit",
        "arguments": "--no-commit",
        "description": "With --no-commit perform the merge but pretend the merge failed and do not autocommit, to give the user a chance to inspect and further tweak the merge result before committing."
      },
      {
        "argument": "--edit",
        "arguments": "--edit, -e",
        "description": "Invoke an editor before committing successful mechanical merge to further edit the auto-generated merge message, so that the user can explain and justify the merge."
      },
      {
        "argument": "--no-edit",
        "arguments": "--no-edit",
        "description": "The --no-edit option can be used to accept the auto-generated message (this is generally discouraged)."
      },
      {
        "argument": "--ff",
        "arguments": "--ff",
        "description": "When the merge resolves as a fast-forward, only update the branch pointer, without creating a merge commit.\nThis is the default behavior."
      },
      {
        "argument": "--no-ff",
        "arguments": "--no-ff",
        "description": "Create a merge commit even when the merge resolves as a fast-forward.\nThis is the default behaviour when merging an annotated (and possibly signed) tag."
      },
      {
        "argument": "--ff-only",
        "arguments": "--ff-only",
        "description": "Refuse to merge and exit with a non-zero status unless the current HEAD is already up-to-date or the merge can be resolved as a fast-forward."
      },
      {
        "argument": "--log[=<n>]",
        "arguments": "--log[=<n>]",
        "description": "In addition to branch names, populate the log message with one-line descriptions from at most <n> actual commits that are being merged.\nSee also git-fmt-merge-msg(1)."
      },
      {
        "argument": "--no-log",
        "arguments": "--no-log",
        "description": "With --no-log do not list one-line descriptions from the actual commits being merged."
      },
      {
        "argument": "--stat",
        "arguments": "--stat",
        "description": "Show a diffstat at the end of the merge.\nThe diffstat is also controlled by the configuration option merge.stat."
      },
      {
        "argument": "--no-stat",
        "arguments": "-n, --no-stat",
        "description": "With -n or --no-stat do not show a diffstat at the end of the merge."
      },
      {
        "argument": "--squash",
        "arguments": "--squash",
        "description": "Produce the working tree and index state as if a real merge happened, but do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit).\nThis allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus)."
      },
      {
        "argument": "--no-squash",
        "arguments": "--no-squash",
        "description": "With --no-squash perform the merge and commit the result.\nThis option can be used to override --squash."
      },
      {
        "argument": "--strategy=<strategy>",
        "arguments": "-s <strategy>, --strategy=<strategy>",
        "description": "Use the given merge strategy; can be supplied more than once to specify them in the order they should be tried.\nIf there is no -s option, a built-in list of strategies is used instead (git merge-recursive when merging a single head, git merge-octopus otherwise)."
      },
      {
        "argument": "--strategy-option=<option>",
        "arguments": "-X <option>, --strategy-option=<option>",
        "description": "Pass merge strategy specific option through to the merge strategy."
      },
      {
        "argument": "--verify-signatures",
        "arguments": "--verify-signatures",
        "description": "Verify that the tip commit of the side branch being merged is signed with a valid key, i.e.\na key that has a valid uid: in the default trust model, this means the signing key has been signed by a trusted key."
      },
      {
        "argument": "--no-verify-signatures",
        "arguments": "--no-verify-signatures",
        "description": "Verify that the tip commit of the side branch being merged is signed with a valid key, i.e.\na key that has a valid uid: in the default trust model, this means the signing key has been signed by a trusted key."
      },
      {
        "argument": "--allow-unrelated-histories",
        "arguments": "--allow-unrelated-histories",
        "description": "By default, git merge command refuses to merge histories that do not share a common ancestor.\nThis option can be used to override this safety when merging histories of two projects that started their lives independently.\nAs that is a very rare occasion, no configuration variable to enable this by default exists and will not be added."
      },
      {
        "argument": "--rebase[=false|true|preserve|interactive]",
        "arguments": "-r, --rebase[=false|true|preserve|interactive]",
        "description": "When true, rebase the current branch on top of the upstream branch after fetching.\nIf there is a remote-tracking branch corresponding to the upstream branch and the upstream branch was rebased since last fetched, the rebase uses that information to avoid rebasing non-local changes."
      },
      {
        "argument": "--no-rebase",
        "arguments": "--no-rebase",
        "description": "Override earlier --rebase."
      },
      {
        "argument": "--autostash",
        "arguments": "--autostash",
        "description": "Before starting rebase, stash local modifications away if needed, and apply the stash when done."
      },
      {
        "argument": "--no-autostash",
        "arguments": "--no-autostash",
        "description": "--no-autostash is useful to override the rebase.autoStash configuration variable."
      },
      {
        "argument": "--all",
        "arguments": "--all",
        "description": "Fetch all remotes."
      },
      {
        "argument": "--append",
        "arguments": "-a, --append",
        "description": "Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD.\nWithout this option old data in .git/FETCH_HEAD will be overwritten."
      },
      {
        "argument": "--depth=<depth>",
        "arguments": "--depth=<depth>",
        "description": "Limit fetching to the specified number of commits from the tip of each remote branch history.\nIf fetching to a shallow repository created by git clone with --depth=<depth> option (see git-clone(1)), deepen or shorten the history to the specified number of commits.\nTags for the deepened commits are not fetched."
      },
      {
        "argument": "--deepen=<depth>",
        "arguments": "--deepen=<depth>",
        "description": "Similar to --depth, except it specifies the number of commits from the current shallow boundary instead of from the tip of each remote branch history."
      },
      {
        "argument": "--shallow-since=<date>",
        "arguments": "--shallow-since=<date>",
        "description": "Deepen or shorten the history of a shallow repository to include all reachable commits after <date>."
      },
      {
        "argument": "--shallow-exclude=<revision>",
        "arguments": "--shallow-exclude=<revision>",
        "description": "Deepen or shorten the history of a shallow repository to exclude commits reachable from a specified remote branch or tag.\nThis option can be specified multiple times."
      },
      {
        "argument": "--unshallow",
        "arguments": "--unshallow",
        "description": "If the source repository is complete, convert a shallow repository to a complete one, removing all the limitations imposed by shallow repositories.\nIf the source repository is shallow, fetch as much as possible so that the current repository has the same history as the source repository."
      },
      {
        "argument": "--update-shallow",
        "arguments": "--update-shallow",
        "description": "By default when fetching from a shallow repository, git fetch refuses refs that require updating .git/shallow.\nThis option updates .git/shallow and accept such refs."
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "When git fetch is used with <rbranch>:<lbranch> refspec, it refuses to update the local branch <lbranch> unless the remote branch <rbranch> it fetches is a descendant of <lbranch>.\nThis option overrides that check."
      },
      {
        "argument": "--keep",
        "arguments": "-k, --keep",
        "description": "Keep downloaded pack."
      },
      {
        "argument": "--no-tags",
        "arguments": "--no-tags",
        "description": "By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally.\nThis option disables this automatic tag following.\nThe default behavior for a remote may be specified with the remote.<name>.tagOpt setting."
      },
      {
        "argument": "--update-head-ok",
        "arguments": "-u, --update-head-ok",
        "description": "By default git fetch refuses to update the head which corresponds to the current branch.\nThis flag disables the check.\nThis is purely for the internal use for git pull to communicate with git fetch, and unless you are implementing your own Porcelain you are not supposed to use it."
      },
      {
        "argument": "--upload-pack <upload-pack>",
        "arguments": "--upload-pack <upload-pack>",
        "description": "When given, and the repository to fetch from is handled by git fetch-pack, --exec=<upload-pack> is passed to the command to specify non-default path for the command run on the other end."
      },
      {
        "argument": "--progress",
        "arguments": "--progress",
        "description": "Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified.\nThis flag forces progress status even if the standard error stream is not directed to a terminal."
      },
      {
        "argument": "--ipv4",
        "arguments": "-4, --ipv4",
        "description": "Use IPv4 addresses only, ignoring IPv6 addresses."
      },
      {
        "argument": "--ipv6",
        "arguments": "-6, --ipv6",
        "description": "Use IPv6 addresses only, ignoring IPv4 addresses."
      }
    ]
  },
  {
    "section": "fetch",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-fetch",
    "description": "Fetch branches and/or tags (collectively, \"refs\") from one or more other repositories, along with the objects necessary to complete their histories.\nRemote-tracking branches are updated.",
    "options": [
      {
        "argument": "--all",
        "arguments": "--all",
        "description": "Fetch all remotes."
      },
      {
        "argument": "--append",
        "arguments": "-a, --append",
        "description": "Append ref names and object names of fetched refs to the existing contents of .git/FETCH_HEAD.\nWithout this option old data in .git/FETCH_HEAD will be overwritten."
      },
      {
        "argument": "--depth=<depth>",
        "arguments": "--depth=<depth>",
        "description": "Limit fetching to the specified number of commits from the tip of each remote branch history.\nIf fetching to a shallow repository created by git clone with --depth=<depth> option (see git-clone(1)), deepen or shorten the history to the specified number of commits.\nTags for the deepened commits are not fetched."
      },
      {
        "argument": "--deepen=<depth>",
        "arguments": "--deepen=<depth>",
        "description": "Similar to --depth, except it specifies the number of commits from the current shallow boundary instead of from the tip of each remote branch history."
      },
      {
        "argument": "--shallow-since=<date>",
        "arguments": "--shallow-since=<date>",
        "description": "Deepen or shorten the history of a shallow repository to include all reachable commits after <date>."
      },
      {
        "argument": "--shallow-exclude=<revision>",
        "arguments": "--shallow-exclude=<revision>",
        "description": "Deepen or shorten the history of a shallow repository to exclude commits reachable from a specified remote branch or tag.\nThis option can be specified multiple times."
      },
      {
        "argument": "--unshallow",
        "arguments": "--unshallow",
        "description": "If the source repository is complete, convert a shallow repository to a complete one, removing all the limitations imposed by shallow repositories.\nIf the source repository is shallow, fetch as much as possible so that the current repository has the same history as the source repository."
      },
      {
        "argument": "--update-shallow",
        "arguments": "--update-shallow",
        "description": "By default when fetching from a shallow repository, git fetch refuses refs that require updating .git/shallow.\nThis option updates .git/shallow and accept such refs."
      },
      {
        "argument": "--dry-run",
        "arguments": "--dry-run",
        "description": "Show what would be done, without making any changes."
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "When git fetch is used with <rbranch>:<lbranch> refspec, it refuses to update the local branch <lbranch> unless the remote branch <rbranch> it fetches is a descendant of <lbranch>.\nThis option overrides that check."
      },
      {
        "argument": "--keep",
        "arguments": "-k, --keep",
        "description": "Keep downloaded pack."
      },
      {
        "argument": "--multiple",
        "arguments": "--multiple",
        "description": "Allow several <repository> and <group> arguments to be specified.\nNo <refspec>s may be specified."
      },
      {
        "argument": "--prune",
        "arguments": "-p, --prune",
        "description": "Before fetching, remove any remote-tracking references that no longer exist on the remote."
      },
      {
        "argument": "--no-tags",
        "arguments": "-n, --no-tags",
        "description": "By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally.\nThis option disables this automatic tag following.\nThe default behavior for a remote may be specified with the remote.<name>.tagOpt setting."
      },
      {
        "argument": "--refmap=<refspec>",
        "arguments": "--refmap=<refspec>",
        "description": "When fetching refs listed on the command line, use the specified refspec (can be given more than once) to map the refs to remote-tracking branches, instead of the values of remote.*.fetch configuration variables for the remote repository."
      },
      {
        "argument": "--tags",
        "arguments": "-t, --tags",
        "description": "Fetch all tags from the remote (i.e., fetch remote tags refs/tags/* into local tags with the same name), in addition to whatever else would otherwise be fetched."
      },
      {
        "argument": "--recurse-submodules[=yes|on-demand|no]",
        "arguments": "--recurse-submodules[=yes|on-demand|no]",
        "description": "This option controls if and under what conditions new commits of populated submodules should be fetched too."
      },
      {
        "argument": "--jobs=<n>",
        "arguments": "-j, --jobs=<n>",
        "description": "Number of parallel children to be used for fetching submodules.\nEach will fetch from different submodules, such that fetching many submodules will be faster.\nBy default submodules will be fetched one at a time."
      },
      {
        "argument": "--no-recurse-submodules",
        "arguments": "--no-recurse-submodules",
        "description": "Disable recursive fetching of submodules (this has the same effect as using the --recurse-submodules=no option)."
      },
      {
        "argument": "--submodule-prefix=<path>",
        "arguments": "--submodule-prefix=<path>",
        "description": "Prepend <path> to paths printed in informative messages."
      },
      {
        "argument": "--recurse-submodules-default=[yes|on-demand]",
        "arguments": "--recurse-submodules-default=[yes|on-demand]",
        "description": "This option is used internally to temporarily provide a non-negative default value for the --recurse-submodules option.\nAll other methods of configuring fetch’s submodule recursion (such as settings in gitmodules(5) and git-config(1)) override this option, as does specifying --[no-]recurse-submodules directly."
      },
      {
        "argument": "--update-head-ok",
        "arguments": "-u, --update-head-ok",
        "description": "By default git fetch refuses to update the head which corresponds to the current branch.\nThis flag disables the check.\nThis is purely for the internal use for git pull to communicate with git fetch, and unless you are implementing your own Porcelain you are not supposed to use it."
      },
      {
        "argument": "--upload-pack <upload-pack>",
        "arguments": "--upload-pack <upload-pack>",
        "description": "When given, and the repository to fetch from is handled by git fetch-pack, --exec=<upload-pack> is passed to the command to specify non-default path for the command run on the other end."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Pass --quiet to git-fetch-pack and silence any other internally used git commands.\nProgress is not reported to the standard error stream."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "Be verbose."
      },
      {
        "argument": "--progress",
        "arguments": "--progress",
        "description": "Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified.\nThis flag forces progress status even if the standard error stream is not directed to a terminal."
      },
      {
        "argument": "--ipv4",
        "arguments": "-4, --ipv4",
        "description": "Use IPv4 addresses only, ignoring IPv6 addresses."
      },
      {
        "argument": "--ipv6",
        "arguments": "-6, --ipv6",
        "description": "Use IPv6 addresses only, ignoring IPv4 addresses."
      }
    ]
  },
  {
    "section": "init",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-init",
    "description": "This command creates an empty Git repository - basically a .git directory with subdirectories for objects, refs/heads, refs/tags, and template files.\nAn initial branch without any commits will be created",
    "options": [
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Only print error and warning messages; all other output will be suppressed."
      },
      {
        "argument": "--bare",
        "arguments": "--bare",
        "description": "Create a bare repository.\nIf GIT_DIR environment is not set, it is set to the current working directory."
      },
      {
        "argument": "--template=<template_directory>",
        "arguments": "--template=<template_directory>",
        "description": "Specify the directory from which templates will be used.\n(See the 'TEMPLATE DIRECTORY' section below.)"
      },
      {
        "argument": "--separate-git-dir=<git-dir>",
        "arguments": "--separate-git-dir=<git-dir>",
        "description": "Instead of initializing the repository as a directory to either $GIT_DIR or ./.git/, create a text file there containing the path to the actual repository.\nThis file acts as filesystem-agnostic Git symbolic link to the repository."
      },
      {
        "argument": "--shared[=(false|true|umask|group|all|world|everybody|0xxx)]",
        "arguments": "--shared[=(false|true|umask|group|all|world|everybody|0xxx)]",
        "description": "Specify that the Git repository is to be shared amongst several users.\nThis allows users belonging to the same group to push into that repository.\nWhen specified, the config variable 'core.sharedRepository' is set so that files and directories under $GIT_DIR are created with the requested permissions.\nWhen not specified, Git will use permissions reported by umask(2)."
      }
    ]
  },
  {
    "section": "rebase",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-rebase",
    "description": "Reapply commits on top of another base tip",
    "options": [
      {
        "argument": "--onto <newbase>",
        "arguments": "--onto <newbase>",
        "description": "Starting point at which to create the new commits.\nIf the --onto option is not specified, the starting point is <upstream>.\nMay be any valid commit, and not just an existing branch name.\nAs a special case, you may use \"A...B\" as a shortcut for the merge base of A and B if there is exactly one merge base.\nYou can leave out at most one of A and B, in which case it defaults to HEAD."
      },
      {
        "argument": "--keep-base",
        "arguments": "--keep-base",
        "description": "Set the starting point at which to create the new commits to the merge base of <upstream> <branch>.\nRunning git rebase --keep-base <upstream> <branch> is equivalent to running git rebase --onto <upstream>...\n<upstream>.\nThis option is useful in the case where one is developing a feature on top of an upstream branch.\nWhile the feature is being worked on, the upstream branch may advance and it may not be the best idea to keep rebasing on top of the upstream but to keep the base commit as-is.\nAlthough both this option and --fork-point find the merge base between <upstream> and <branch>, this option uses the merge base as the starting point on which new commits will be created, whereas --fork-point uses the merge base to determine the set of commits which will be rebased."
      },
      {
        "method_name": "continue-rebase",
        "argument": "--continue",
        "arguments": "--continue",
        "description": "Restart the rebasing process after having resolved a merge conflict."
      },
      {
        "argument": "--abort",
        "arguments": "--abort",
        "description": "Abort the rebase operation and reset HEAD to the original branch.\nIf <branch> was provided when the rebase operation was started, then HEAD will be reset to <branch>.\nOtherwise HEAD will be reset to where it was when the rebase operation was started."
      },
      {
        "argument": "--quit",
        "arguments": "--quit",
        "description": "Abort the rebase operation but HEAD is not reset back to the original branch.\nThe index and working tree are also left unchanged as a result.\nIf a temporary stash entry was created using --autostash, it will be saved to the stash list."
      },
      {
        "argument": "--apply",
        "arguments": "--apply",
        "description": "Use applying strategies to rebase (calling git-am internally).\nThis option may become a no-op in the future once the merge backend handles everything the apply one does."
      },
      {
        "argument": "--empty=(drop|keep|ask)",
        "arguments": "--empty={drop,keep,ask}",
        "description": "How to handle commits that are not empty to start and are not clean cherry-picks of any upstream commit,\nbut which become empty after rebasing (because they contain a subset of already upstream changes).\nWith drop (the default), commits that become empty are dropped.\nWith keep, such commits are kept.\nWith ask (implied by --interactive), the rebase will halt when an empty commit is applied allowing you to choose whether to drop it, edit files more, or just commit the empty changes.\nOther options, like --exec, will use the default of drop unless -i/--interactive is explicitly specified.\nNote that commits which start empty are kept (unless --no-keep-empty is specified), and commits which are clean cherry-picks (as determined by git log --cherry-mark ...) are detected and dropped as a preliminary step (unless --reapply-cherry-picks is passed)."
      },
      {
        "argument": "--no-keep-empty",
        "arguments": "--no-keep-empty, --keep-empty",
        "description": "Do not keep commits that start empty before the rebase (i.e.\nthat do not change anything from its parent) in the result.\nThe default is to keep commits which start empty, since creating such commits requires passing the --allow-empty override flag to git commit, signifying that a user is very intentionally creating such a commit and thus wants to keep it.\nUsage of this flag will probably be rare, since you can get rid of commits that start empty by just firing up an interactive rebase and removing the lines corresponding to the commits you don’t want.\nThis flag exists as a convenient shortcut, such as for cases where\nexternal tools generate many empty commits and you want them all removed.\nFor commits which do not start empty but become empty after rebasing, see the --empty flag."
      },
      {
        "argument": "--keep-empty",
        "arguments": "--no-keep-empty, --keep-empty",
        "description": "Do not keep commits that start empty before the rebase (i.e.\nthat do not change anything from its parent) in the result.\nThe default is to keep commits which start empty, since creating such commits requires passing the --allow-empty override flag to git commit, signifying that a user is very intentionally creating such a commit and thus wants to keep it.\nUsage of this flag will probably be rare, since you can get rid of commits that start empty by just firing up an interactive rebase and removing the lines corresponding to the commits you don’t want.\nThis flag exists as a convenient shortcut, such as for cases where\nexternal tools generate many empty commits and you want them all removed.\nFor commits which do not start empty but become empty after rebasing, see the --empty flag."
      },
      {
        "argument": "--reapply-cherry-picks",
        "arguments": "--reapply-cherry-picks, --no-reapply-cherry-picks",
        "description": "Reapply all clean cherry-picks of any upstream commit instead of preemptively dropping them.\n(If these commits then become empty after rebasing, because they contain a subset of already upstream changes, the behavior towards them is controlled by the --empty flag.)\nBy default (or if --no-reapply-cherry-picks is given), these commits will be automatically dropped.\nBecause this necessitates reading all upstream commits, this can be expensive in repos with a large number of upstream commits that need to be read.\nWhen using the merge backend, warnings will be issued for each dropped commit (unless --quiet is given).\nAdvice will also be issued unless advice.skippedCherryPicks is set to false (see git-config(1)).\n--reapply-cherry-picks allows rebase to forgo reading all upstream commits, potentially improving performance."
      },
      {
        "argument": "--no-reapply-cherry-picks",
        "arguments": "--reapply-cherry-picks, --no-reapply-cherry-picks",
        "description": "Reapply all clean cherry-picks of any upstream commit instead of preemptively dropping them.\n(If these commits then become empty after rebasing, because they contain a subset of already upstream changes, the behavior towards them is controlled by the --empty flag.)\nBy default (or if --no-reapply-cherry-picks is given), these commits will be automatically dropped.\nBecause this necessitates reading all upstream commits, this can be expensive in repos with a large number of upstream commits that need to be read.\nWhen using the merge backend, warnings will be issued for each dropped commit (unless --quiet is given).\nAdvice will also be issued unless advice.skippedCherryPicks is set to false (see git-config(1)).\n--reapply-cherry-picks allows rebase to forgo reading all upstream commits, potentially improving performance."
      },
      {
        "argument": "--allow-empty-message",
        "arguments": "--allow-empty-message",
        "description": "No-op.\nRebasing commits with an empty message used to fail and this option would override that behavior,\nallowing commits with empty messages to be rebased.\nNow commits with an empty message do not cause rebasing to halt."
      },
      {
        "argument": "--skip",
        "arguments": "--skip",
        "description": "Restart the rebasing process by skipping the current patch."
      },
      {
        "argument": "--edit-todo",
        "arguments": "--edit-todo",
        "description": "Edit the todo list during an interactive rebase."
      },
      {
        "argument": "--show-current-patch",
        "arguments": "--show-current-patch",
        "description": "Show the current patch in an interactive rebase or when rebase is stopped because of conflicts.\nThis is the equivalent of git show REBASE_HEAD."
      },
      {
        "argument": "--merge",
        "arguments": "-m, --merge",
        "description": "Using merging strategies to rebase (default).\nNote that a rebase merge works by replaying each commit from the working branch on top of the <upstream> branch.\nBecause of this, when a merge conflict happens, the side reported as ours is the so-far rebased series, starting with <upstream>, and theirs is the working branch.\nIn other words, the sides are swapped."
      },
      {
        "argument": "--strategy=<strategy>",
        "arguments": "-s <strategy>, --strategy=<strategy>",
        "description": "Use the given merge strategy, instead of the default ort.\nThis implies --merge.\nBecause git rebase replays each commit from the working branch on top of the <upstream> branch using the given strategy, using the ours strategy simply empties all patches from the <branch>, which makes little sense."
      },
      {
        "argument": "--strategy-option=<strategy-option>",
        "arguments": "-X <strategy-option>, --strategy-option=<strategy-option>",
        "description": "Pass the <strategy-option> through to the merge strategy.\nThis implies --merge and, if no strategy has been specified, -s ort.\nNote the reversal of ours and theirs as noted above for the -m option."
      },
      {
        "argument": "--rerere-autoupdate",
        "arguments": "--rerere-autoupdate, --no-rerere-autoupdate",
        "description": "Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible."
      },
      {
        "argument": "--no-rerere-autoupdate",
        "arguments": "--rerere-autoupdate, --no-rerere-autoupdate",
        "description": "Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible."
      },
      {
        "argument": "--gpg-sign[=<keyID>]",
        "arguments": "-S[<keyid>], --gpg-sign[=<keyid>], --no-gpg-sign",
        "description": "GPG-sign commits.\nThe keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space.\n--no-gpg-sign is useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign."
      },
      {
        "argument": "--no-gpg-sign",
        "arguments": "-S[<keyid>], --gpg-sign[=<keyid>], --no-gpg-sign",
        "description": "GPG-sign commits.\nThe keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space.\n--no-gpg-sign is useful to countermand both commit.gpgSign configuration variable, and earlier --gpg-sign."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Be quiet.\nImplies --no-stat."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "Be verbose.\nImplies --stat."
      },
      {
        "argument": "--stat",
        "arguments": "--stat",
        "description": "Show a diffstat of what changed upstream since the last rebase.\nThe diffstat is also controlled by the configuration option rebase.stat."
      },
      {
        "argument": "--no-stat",
        "arguments": "-n, --no-stat",
        "description": "Do not show a diffstat as part of the rebase process."
      },
      {
        "argument": "--no-verify",
        "arguments": "--no-verify",
        "description": "This option bypasses the pre-rebase hook.\nSee also githooks(5)."
      },
      {
        "argument": "--verify",
        "arguments": "--verify",
        "description": "Allows the pre-rebase hook to run, which is the default.\nThis option can be used to override --no-verify.\nSee also githooks(5)."
      },
      {
        "method_name": "ensure-context",
        "argument": "-C<n>",
        "arguments": "-C<n>",
        "description": "Ensure at least <n> lines of surrounding context match before and after each change.\nWhen fewer lines of surrounding context exist they all must match.\nBy default no context is ever ignored.\nImplies --apply."
      },
      {
        "argument": "--no-ff",
        "arguments": "--no-ff, --force-rebase, -f",
        "description": "Individually replay all rebased commits instead of fast-forwarding over the unchanged ones.\nThis ensures that the entire history of the rebased branch is composed of new commits.\nYou may find this helpful after reverting a topic branch merge, as this option recreates the topic branch with fresh commits so it can be remerged successfully without needing to \"revert the reversion\" (see the revert-a-faulty-merge How-To[1] for details)."
      },
      {
        "argument": "--force-rebase",
        "arguments": "--no-ff, --force-rebase, -f",
        "description": "Individually replay all rebased commits instead of fast-forwarding over the unchanged ones.\nThis ensures that the entire history of the rebased branch is composed of new commits.\nYou may find this helpful after reverting a topic branch merge, as this option recreates the topic branch with fresh commits so it can be remerged successfully without needing to \"revert the reversion\" (see the revert-a-faulty-merge How-To[1] for details)."
      },
      {
        "argument": "--fork-point",
        "arguments": "--fork-point, --no-fork-point",
        "description": "Use reflog to find a better common ancestor between <upstream> and <branch> when calculating which commits have been introduced by <branch>.\nWhen --fork-point is active, fork_point will be used instead of <upstream> to calculate the set of commits to rebase, where fork_point is the result of git merge-base --fork-point <upstream> <branch> command (see git-merge-base(1)).\nIf fork_point ends up being empty, the <upstream> will be used as a fallback.\nIf <upstream> is given on the command line, then the default is --no-fork-point, otherwise the default is --fork-point.\nSee also rebase.forkpoint in git-config(1).\nIf your branch was based on <upstream> but <upstream> was rewound and your branch contains commits which were dropped, this option can be used with --keep-base in order to drop those commits from your branch."
      },
      {
        "argument": "--no-fork-point",
        "arguments": "--fork-point, --no-fork-point",
        "description": "Use reflog to find a better common ancestor between <upstream> and <branch> when calculating which commits have been introduced by <branch>.\nWhen --fork-point is active, fork_point will be used instead of <upstream> to calculate the set of commits to rebase, where fork_point is the result of git merge-base --fork-point <upstream> <branch> command (see git-merge-base(1)).\nIf fork_point ends up being empty, the <upstream> will be used as a fallback.\nIf <upstream> is given on the command line, then the default is --no-fork-point, otherwise the default is --fork-point.\nSee also rebase.forkpoint in git-config(1).\nIf your branch was based on <upstream> but <upstream> was rewound and your branch contains commits which were dropped, this option can be used with --keep-base in order to drop those commits from your branch."
      },
      {
        "argument": "--ignore-whitespace",
        "arguments": "--ignore-whitespace",
        "description": "Ignore whitespace differences when trying to reconcile differences.\nCurrently, each backend implements an approximation of this behavior:\napply backend: When applying a patch, ignore changes in whitespace in context lines.\nUnfortunately, this means that if the \"old\" lines being replaced by the patch differ only in whitespace from the existing file, you will get a merge conflict instead of a successful patch application.\nmerge backend: Treat lines with only whitespace changes as unchanged when merging.\nUnfortunately, this means that any patch hunks that were intended to modify whitespace and nothing else will be dropped, even if the other side had no changes that conflicted."
      },
      {
        "argument": "--whitespace=<option>",
        "arguments": "--whitespace=<option>",
        "description": "This flag is passed to the git apply program (see git-apply(1)) that applies the patch.\nImplies --apply."
      },
      {
        "argument": "--committer-date-is-author-date",
        "arguments": "--committer-date-is-author-date",
        "description": "Instead of using the current time as the committer date, use the author date of the commit being rebased as the committer date.\nThis option implies --force-rebase."
      },
      {
        "argument": "--ignore-date",
        "arguments": "--ignore-date, --reset-author-date",
        "description": "Instead of using the author date of the original commit, use the current time as the author date of the rebased commit.\nThis option implies --force-rebase."
      },
      {
        "argument": "--reset-author-date",
        "arguments": "--ignore-date, --reset-author-date",
        "description": "Instead of using the author date of the original commit, use the current time as the author date of the rebased commit.\nThis option implies --force-rebase."
      },
      {
        "argument": "--signoff",
        "arguments": "--signoff",
        "description": "Add a Signed-off-by trailer to all the rebased commits.\nNote that if --interactive is given then only commits marked to be picked, edited or reworded will have the trailer added."
      },
      {
        "argument": "--interactive",
        "arguments": "-i, --interactive",
        "description": "Make a list of the commits which are about to be rebased.\nLet the user edit that list before rebasing.\nThis mode can also be used to split commits (see SPLITTING COMMITS below).\nThe commit list format can be changed by setting the configuration option rebase.instructionFormat.\nA customized instruction format will automatically have the long commit hash prepended to the format."
      },
      {
        "argument": "--rebase-merges[=(rebase-cousins|no-rebase-cousins)]",
        "arguments": "-r, --rebase-merges[=(rebase-cousins|no-rebase-cousins)]",
        "description": "By default, a rebase will simply drop merge commits from the todo list, and put the rebased commits into a single, linear branch.\nWith --rebase-merges, the rebase will instead try to preserve the branching structure within the commits that are to be rebased, by recreating the merge commits.\nAny resolved merge conflicts or manual amendments in these merge commits will have to be resolved/re-applied manually.\nBy default, or when no-rebase-cousins was specified, commits which do not have <upstream> as direct ancestor will keep their original branch point, i.e.\ncommits that would be excluded by git-log(1)'s --ancestry-path option will keep their original ancestry by default.\nIf the rebase-cousins mode is turned on, such commits are instead rebased onto <upstream> (or <onto>, if specified).\nIt is currently only possible to recreate the merge commits using the ort merge strategy; different merge strategies can be used only via explicit exec git merge -s <strategy> [...]  commands."
      },
      {
        "argument": "--exec <cmd>",
        "arguments": "-x <cmd>, --exec <cmd>",
        "description": "Append \"exec <cmd>\" after each line creating a commit in the final history.\n<cmd> will be interpreted as one or more shell commands.\nAny command that fails will interrupt the rebase, with exit code 1."
      },
      {
        "argument": "--root",
        "arguments": "--root",
        "description": "Rebase all commits reachable from <branch>, instead of limiting them with an <upstream>.\nThis allows you to rebase the root commit(s) on a branch.\nWhen used with --onto, it will skip changes already contained in <newbase> (instead of <upstream>) whereas without\n--onto it will operate on every change."
      },
      {
        "argument": "--autosquash",
        "arguments": "--autosquash, --no-autosquash",
        "description": "When the commit log message begins with \"squash! ...\" or \"fixup! ...\" or \"amend! ...\", and there is already a commit in the todo list that matches the same ..., automatically modify the todo list of rebase -i, so that the commit marked for squashing comes right after the commit to be modified, and change the action of the moved commit from pick to squash or fixup or fixup -C respectively.\nA commit matches the ...\n if the commit subject matches, or if the ...\n refers to the commit’s hash.\nAs a fall-back, partial matches of the commit subject work, too.\nThe recommended way to create fixup/amend/squash commits is by using the --fixup, --fixup=amend: or --fixup=reword: and --squash options respectively of git-commit(1).\nIf the --autosquash option is enabled by default using the configuration variable rebase.autoSquash, this option can be used to override and disable this setting."
      },
      {
        "argument": "--no-autosquash",
        "arguments": "--autosquash, --no-autosquash",
        "description": "When the commit log message begins with \"squash! ...\" or \"fixup! ...\" or \"amend! ...\", and there is already a commit in the todo list that matches the same ..., automatically modify the todo list of rebase -i, so that the commit marked for squashing comes right after the commit to be modified, and change the action of the moved commit from pick to squash or fixup or fixup -C respectively.\nA commit matches the ...\n if the commit subject matches, or if the ...\n refers to the commit’s hash.\nAs a fall-back, partial matches of the commit subject work, too.\nThe recommended way to create fixup/amend/squash commits is by using the --fixup, --fixup=amend: or --fixup=reword: and --squash options respectively of git-commit(1).\nIf the --autosquash option is enabled by default using the configuration variable rebase.autoSquash, this option can be used to override and disable this setting."
      },
      {
        "argument": "--autostash",
        "arguments": "--autostash, --no-autostash",
        "description": "Automatically create a temporary stash entry before the operation begins, and apply it after the operation ends.\nThis means that you can run rebase on a dirty worktree.\nHowever, use with care: the final stash application after a successful rebase might result in non-trivial conflicts."
      },
      {
        "argument": "--no-autostash",
        "arguments": "--autostash, --no-autostash",
        "description": "Automatically create a temporary stash entry before the operation begins, and apply it after the operation ends.\nThis means that you can run rebase on a dirty worktree.\nHowever, use with care: the final stash application after a successful rebase might result in non-trivial conflicts."
      },
      {
        "argument": "--reschedule-failed-exec",
        "arguments": "--reschedule-failed-exec, --no-reschedule-failed-exec",
        "description": "Automatically reschedule exec commands that failed.\nThis only makes sense in interactive mode (or when an --exec option was provided).\nEven though this option applies once a rebase is started, it’s set for the whole rebase at the start based on either the rebase.rescheduleFailedExec configuration (see git-config(1) or \"CONFIGURATION\" below) or whether this option is provided.\nOtherwise an explicit --no-reschedule-failed-exec at the start would be overridden by the presence of rebase.rescheduleFailedExec=true configuration."
      },
      {
        "argument": "--no-reschedule-failed-exec",
        "arguments": "--reschedule-failed-exec, --no-reschedule-failed-exec",
        "description": "Automatically reschedule exec commands that failed.\nThis only makes sense in interactive mode (or when an --exec option was provided).\nEven though this option applies once a rebase is started, it’s set for the whole rebase at the start based on either the rebase.rescheduleFailedExec configuration (see git-config(1) or \"CONFIGURATION\" below) or whether this option is provided.\nOtherwise an explicit --no-reschedule-failed-exec at the start would be overridden by the presence of rebase.rescheduleFailedExec=true configuration."
      }
    ]
  },
  {
    "section": "push",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-push",
    "description": "Updates remote refs using local refs, while sending objects necessary to complete the given refs.",
    "options": [
      {
        "argument": "--all",
        "arguments": "--all",
        "description": "Push all branches (i.e.\nrefs under refs/heads/); cannot be used with other <refspec>."
      },
      {
        "argument": "--prune",
        "arguments": "--prune",
        "description": "Remove remote branches that don’t have a local counterpart.\nFor example a remote branch tmp will be removed if a local branch with the same name doesn’t exist any more.\nThis also respects refspecs, e.g.\n git push --prune remote refs/heads/*:refs/tmp/* would make sure that remote refs/tmp/foo will be removed if refs/heads/foo doesn’t exist."
      },
      {
        "argument": "--mirror",
        "arguments": "--mirror",
        "description": "Instead of naming each ref to push, specifies that all refs under refs/ (which includes but is not limited to refs/heads/, refs/remotes/, and refs/tags/) be mirrored to the remote repository.\nNewly created local refs will be pushed to the remote end, locally updated refs will be force updated on the remote end, and deleted refs will be removed from the remote end.\nThis is the default if the configuration option remote.<remote>.mirror is set."
      },
      {
        "argument": "--dry-run",
        "arguments": "-n, --dry-run",
        "description": "Do everything except actually send the updates."
      },
      {
        "argument": "--porcelain",
        "arguments": "--porcelain",
        "description": "Produce machine-readable output.\nThe output status line for each ref will be tab-separated and sent to stdout instead of stderr.\nThe full symbolic names of the refs will be given."
      },
      {
        "argument": "--delete",
        "arguments": "--delete",
        "description": "All listed refs are deleted from the remote repository.\nThis is the same as prefixing all refs with a colon."
      },
      {
        "argument": "--tags",
        "arguments": "--tags",
        "description": "All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command line."
      },
      {
        "argument": "--follow-tags",
        "arguments": "--follow-tags",
        "description": "Push all the refs that would be pushed without this option,\nand also push annotated tags in refs/tags that are missing from the remote but are pointing at commit-ish that are reachable from the refs being pushed.\nThis can also be specified with configuration variable push.followTags.\nFor more information, see push.followTags in git-config(1)."
      },
      {
        "argument": "--signed",
        "arguments": "--signed",
        "description": "GPG-sign the push request to update refs on the receiving side,\nto allow it to be checked by the hooks and/or be logged.\nIf false or --no-signed, no signing will be attempted.\nIf true or --signed, the push will fail if the server does not support signed pushes.\nIf set to if-asked, sign if and only if the server supports signed pushes.\nThe push will also fail if the actual call to gpg --sign fails.\nSee git-receive-pack(1) for the details on the receiving end."
      },
      {
        "argument": "--no-signed",
        "arguments": "--no-signed",
        "description": "GPG-sign the push request to update refs on the receiving side,\nto allow it to be checked by the hooks and/or be logged.\nIf false or --no-signed, no signing will be attempted.\nIf true or --signed, the push will fail if the server does not support signed pushes.\nIf set to if-asked, sign if and only if the server supports signed pushes.\nThe push will also fail if the actual call to gpg --sign fails.\nSee git-receive-pack(1) for the details on the receiving end."
      },
      {
        "argument": "--sign=(true|false|if-asked)",
        "arguments": "--sign=(true|false|if-asked)",
        "description": "GPG-sign the push request to update refs on the receiving side,\nto allow it to be checked by the hooks and/or be logged.\nIf false or --no-signed, no signing will be attempted.\nIf true or --signed, the push will fail if the server does not support signed pushes.\nIf set to if-asked, sign if and only if the server supports signed pushes.\nThe push will also fail if the actual call to gpg --sign fails.\nSee git-receive-pack(1) for the details on the receiving end."
      },
      {
        "argument": "--atomic",
        "arguments": "--atomic",
        "description": "Use an atomic transaction on the remote side if available.\nEither all refs are updated, or on error, no refs are updated.\nIf the server does not support atomic pushes the push will fail."
      },
      {
        "argument": "--no-atomic",
        "arguments": "--no-atomic",
        "description": "Use an atomic transaction on the remote side if available.\nEither all refs are updated, or on error, no refs are updated.\nIf the server does not support atomic pushes the push will fail."
      },
      {
        "argument": "--push-option",
        "arguments": "-o, --push-option",
        "description": "Transmit the given string to the server, which passes them to the pre-receive as well as the post-receive hook.\nThe given string must not contain a NUL or LF character."
      },
      {
        "argument": "--receive-pack=<git-receive-pack>",
        "arguments": "--receive-pack=<git-receive-pack>",
        "description": "Path to the git-receive-pack program on the remote end.\nSometimes useful when pushing to a remote repository over ssh, and you do not have the program in a directory on the default $PATH."
      },
      {
        "argument": "--exec=<git-receive-pack>",
        "arguments": "--exec=<git-receive-pack>",
        "description": "Path to the git-receive-pack program on the remote end.\nSometimes useful when pushing to a remote repository over ssh, and you do not have the program in a directory on the default $PATH."
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "Usually, the command refuses to update a remote ref that is not an ancestor of the local ref used to overwrite it.\nAlso, when --force-with-lease option is used, the command refuses to update a remote ref whose current value does not match what is expected."
      },
      {
        "argument": "--repo=<repository>",
        "arguments": "--repo=<repository>",
        "description": "This option is equivalent to the <repository> argument.\nIf both are specified, the command-line argument takes precedence."
      },
      {
        "argument": "--set-upstream",
        "arguments": "-u, --set-upstream",
        "description": "For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull(1) and other commands.\nFor more information, see branch.<name>.merge in git-config(1)."
      },
      {
        "argument": "--thin",
        "arguments": "--thin",
        "description": "These options are passed to git-send-pack(1).\nA thin transfer significantly reduces the amount of sent data when the sender and receiver share many of the same objects in common.\nThe default is --thin."
      },
      {
        "argument": "--no-thin",
        "arguments": "--no-thin",
        "description": "These options are passed to git-send-pack(1).\nA thin transfer significantly reduces the amount of sent data when the sender and receiver share many of the same objects in common.\nThe default is --thin."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Suppress all output, including the listing of updated refs, unless an error occurs.\nProgress is not reported to the standard error stream."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "Run verbosely."
      },
      {
        "argument": "--progress",
        "arguments": "--progress",
        "description": "Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified.\nThis flag forces progress status even if the standard error stream is not directed to a terminal."
      },
      {
        "argument": "--no-recurse-submodules",
        "arguments": "--no-recurse-submodules",
        "description": "May be used to make sure all submodule commits used by the revisions to be pushed are available on a remote-tracking branch.\nIf check is used Git will verify that all submodule commits that changed in the revisions to be pushed are available on at least one remote of the submodule.\nIf any commits are missing the push will be aborted and exit with non-zero status.\nIf on-demand is used all submodules that changed in the revisions to be pushed will be pushed.\nIf on-demand was not able to push all necessary revisions it will also be aborted and exit with non-zero status.\nIf only is used all submodules will be recursively pushed while the superproject is left unpushed.\nA value of no or using --no-recurse-submodules can be used to override the push.recurseSubmodules configuration variable when no submodule recursion is required."
      },
      {
        "argument": "--recurse-submodules=(check|on-demand|only|no)",
        "arguments": "--recurse-submodules=(check|on-demand|only|no)",
        "description": "May be used to make sure all submodule commits used by the revisions to be pushed are available on a remote-tracking branch.\nIf check is used Git will verify that all submodule commits that changed in the revisions to be pushed are available on at least one remote of the submodule.\nIf any commits are missing the push will be aborted and exit with non-zero status.\nIf on-demand is used all submodules that changed in the revisions to be pushed will be pushed.\nIf on-demand was not able to push all necessary revisions it will also be aborted and exit with non-zero status.\nIf only is used all submodules will be recursively pushed while the superproject is left unpushed.\nA value of no or using --no-recurse-submodules can be used to override the push.recurseSubmodules configuration variable when no submodule recursion is required."
      },
      {
        "argument": "--verify",
        "arguments": "--verify",
        "description": "Toggle the pre-push hook (see githooks(5)).\nThe default is --verify, giving the hook a chance to prevent the push.\nWith --no-verify, the hook is bypassed completely."
      },
      {
        "argument": "--no-verify",
        "arguments": "--no-verify",
        "description": "Toggle the pre-push hook (see githooks(5)).\nThe default is --verify, giving the hook a chance to prevent the push.\nWith --no-verify, the hook is bypassed completely."
      },
      {
        "argument": "--ipv4",
        "arguments": "-4, --ipv4",
        "description": "Use IPv4 addresses only, ignoring IPv6 addresses."
      },
      {
        "argument": "--ipv6",
        "arguments": "-6, --ipv6",
        "description": "Use IPv6 addresses only, ignoring IPv4 addresses."
      }
    ]
  },
  {
    "section": "clone",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-clone",
    "description": "Clones a repository into a newly created directory,\ncreates remote-tracking branches for each branch in the cloned repository,\nand creates and checks out an initial branch that is forked from the cloned repository’s currently active branch",
    "options": [
      {
        "argument": "--local",
        "arguments": "--local, -l",
        "description": "When the repository to clone from is on a local machine, this flag bypasses the normal 'Git aware' transport mechanism and clones the repository by making a copy of HEAD and everything under objects and refs directories.\nThe files under .git/objects/ directory are hardlinked to save space when possible."
      },
      {
        "argument": "--no-hardlinks",
        "arguments": "--no-hardlinks",
        "description": "Force the cloning process from a repository on a local filesystem to copy the files under the .git/objects directory instead of using hardlinks.\nThis may be desirable if you are trying to make a back-up of your repository."
      },
      {
        "argument": "--shared",
        "arguments": "--shared, -s",
        "description": "When the repository to clone is on the local machine, instead of using hard links, automatically setup .git/objects/info/alternates to share the objects with the source repository.\nThe resulting repository starts out without any object of its own."
      },
      {
        "argument": "--dissociate",
        "arguments": "--dissociate",
        "description": "Borrow the objects from reference repositories specified with the --reference options only to reduce network transfer,\nand stop borrowing from them after a clone is made by making necessary local copies of borrowed objects.\nThis option can also be used when cloning locally from a repository that already borrows objects from another repository—the new repository will borrow objects from the same repository,\nand this option can be used to stop the borrowing."
      },
      {
        "argument": "--quiet",
        "arguments": "--quiet, -q",
        "description": "Operate quietly.\nProgress is not reported to the standard error stream."
      },
      {
        "argument": "--verbose",
        "arguments": "--verbose, -v",
        "description": "Run verbosely.\nDoes not affect the reporting of progress status to the standard error stream."
      },
      {
        "argument": "--progress",
        "arguments": "--progress",
        "description": "Progress status is reported on the standard error stream by default when it is attached to a terminal, unless -q is specified.\nThis flag forces progress status even if the standard error stream is not directed to a terminal."
      },
      {
        "argument": "--no-checkout",
        "arguments": "--no-checkout, -n",
        "description": "No checkout of HEAD is performed after the clone is complete."
      },
      {
        "argument": "--bare",
        "arguments": "--bare",
        "description": "Make a bare Git repository.\nThat is, instead of creating <directory> and placing the administrative files in <directory>/.git, make the <directory> itself the $GIT_DIR.\nThis obviously implies the -n because there is nowhere to check out the working tree.\nAlso the branch heads at the remote are copied directly to corresponding local branch heads, without mapping them to refs/remotes/origin/.\nWhen this option is used, neither remote-tracking branches nor the related configuration variables are created."
      },
      {
        "argument": "--mirror",
        "arguments": "--mirror",
        "description": "Set up a mirror of the source repository.\nThis implies --bare.\nCompared to --bare, --mirror not only maps local branches of the source to local branches of the target,\nit maps all refs (including remote-tracking branches, notes etc.) and sets up a refspec configuration such that all these refs are overwritten by a git remote update in the target repository."
      },
      {
        "argument": "--origin <name>",
        "arguments": "--origin <name>, -o <name>",
        "description": "Instead of using the remote name origin to keep track of the upstream repository, use <name>."
      },
      {
        "argument": "--branch <name>",
        "arguments": "--branch <name>, -b <name>",
        "description": "Instead of pointing the newly created HEAD to the branch pointed to by the cloned repository’s HEAD, point to <name> branch instead.\nIn a non-bare repository, this is the branch that will be checked out.\n--branch can also take tags and detaches the HEAD at that commit in the resulting repository."
      },
      {
        "argument": "--upload-pack <upload-pack>",
        "arguments": "--upload-pack <upload-pack>, -u <upload-pack>",
        "description": "When given, and the repository to clone from is accessed via ssh, this specifies a non-default path for the command run on the other end."
      },
      {
        "argument": "--template=<template_directory>",
        "arguments": "--template=<template_directory>",
        "description": "Specify the directory from which templates will be used; (See the 'TEMPLATE DIRECTORY' section of git-init(1).)"
      },
      {
        "argument": "--depth <depth>",
        "arguments": "--depth <depth>",
        "description": "Create a shallow clone with a history truncated to the specified number of commits.\nImplies --single-branch unless --no-single-branch is given to fetch the histories near the tips of all branches.\nIf you want to clone submodules shallowly, also pass --shallow-submodules."
      },
      {
        "argument": "--shallow-since=<date>",
        "arguments": "--shallow-since=<date>",
        "description": "Create a shallow clone with a history after the specified time."
      },
      {
        "argument": "--shallow-exclude=<revision>",
        "arguments": "--shallow-exclude=<revision>",
        "description": "Create a shallow clone with a history, excluding commits reachable from a specified remote branch or tag.\nThis option can be specified multiple times."
      },
      {
        "argument": "--single-branch",
        "arguments": "--single-branch",
        "description": "Clone only the history leading to the tip of a single branch, either specified by the --branch option or the primary branch remote’s HEAD points at.\nFurther fetches into the resulting repository will only update the remote-tracking branch for the branch this option was used for the initial cloning.\nIf the HEAD at the remote did not point at any branch when --single-branch clone was made, no remote-tracking branch is created."
      },
      {
        "argument": "--no-single-branch",
        "arguments": "--no-single-branch",
        "description": "Clone only the history leading to the tip of a single branch, either specified by the --branch option or the primary branch remote’s HEAD points at.\nFurther fetches into the resulting repository will only update the remote-tracking branch for the branch this option was used for the initial cloning.\nIf the HEAD at the remote did not point at any branch when --single-branch clone was made, no remote-tracking branch is created."
      },
      {
        "argument": "--recurse-submodules[=<pathspec>]",
        "arguments": "--recurse-submodules[=<pathspec>]",
        "description": "After the clone is created, initialize and clone submodules within based on the provided pathspec.\nIf no pathspec is provided, all submodules are initialized and cloned.\nSubmodules are initialized and cloned using their default settings.\nThe resulting clone has submodule.active set to the provided pathspec, or '.' (meaning all submodules) if no pathspec is provided.\nThis is equivalent to running git submodule update --init --recursive immediately after the clone is finished.\nThis option is ignored if the cloned repository does not have a worktree/checkout (i.e.\nif any of --no-checkout/-n, --bare, or --mirror is given)"
      },
      {
        "argument": "--shallow-submodules",
        "arguments": "--shallow-submodules",
        "description": "All submodules which are cloned will be shallow with a depth of 1."
      },
      {
        "argument": "--no-shallow-submodules",
        "arguments": "--no-shallow-submodules",
        "description": "All submodules which are cloned will be shallow with a depth of 1."
      },
      {
        "argument": "--separate-git-dir=<git-dir>",
        "arguments": "--separate-git-dir=<git-dir>",
        "description": "Instead of placing the cloned repository where it is supposed to be, place the cloned repository at the specified directory,\nthen make a filesystem-agnostic Git symbolic link to there.\nThe result is Git repository can be separated from working tree."
      },
      {
        "argument": "--jobs <n>",
        "arguments": "-j <n>, --jobs <n>",
        "description": "The number of submodules fetched at the same time.\nDefaults to the submodule.fetchJobs option."
      },
      {
        "method_name": "repository",
        "argument": "<url>",
        "arguments": "<url>",
        "description": "The (possibly remote) repository to clone from."
      },
      {
        "method_name": "directory",
        "argument": "<path>",
        "arguments": "<path>",
        "description": "The name of a new directory to clone into.\nThe \"humanish\" part of the source repository is used if no directory is explicitly given (repo for /path/to/repo.git and foo for host.xz:foo/.git).\nCloning into an existing directory is only allowed if the directory is empty."
      }
    ]
  },
  {
    "section": "checkout",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-checkout",
    "description": "Switch branches or restore working tree files",
    "options": [
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Quiet, suppress feedback messages."
      },
      {
        "argument": "--progress",
        "arguments": "--progress",
        "description": "Progress status is reported on the standard error stream by default when it is attached to a terminal, unless --quiet is specified.\nThis flag enables progress reporting even if not attached to a terminal, regardless of --quiet."
      },
      {
        "argument": "--no-progress",
        "arguments": "--no-progress",
        "description": "Progress status is reported on the standard error stream by default when it is attached to a terminal, unless --quiet is specified.\nThis flag enables progress reporting even if not attached to a terminal, regardless of --quiet."
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "When switching branches, proceed even if the index or the working tree differs from HEAD.\nThis is used to throw away local changes.\nWhen checking out paths from the index, do not fail upon unmerged entries; instead, unmerged entries are ignored."
      },
      {
        "argument": "--ours",
        "arguments": "--ours, --theirs",
        "description": "When checking out paths from the index, check out stage #2 (ours) or #3 (theirs) for unmerged paths."
      },
      {
        "argument": "--theirs",
        "arguments": "--ours, --theirs",
        "description": "When checking out paths from the index, check out stage #2 (ours) or #3 (theirs) for unmerged paths."
      },
      {
        "method_name": "new-branch",
        "argument": "-b [new_branch]",
        "arguments": "-b [new_branch]",
        "description": "Create a new branch named <new_branch> and start it at <start_point>; see git-branch(1) for details."
      },
      {
        "method_name": "new-branch-force",
        "argument": "-B [new_branch]",
        "arguments": "-B [new_branch]",
        "description": "Creates the branch <new_branch> and start it at <start_point>; if it already exists, then reset it to <start_point>.\nThis is equivalent to running 'git branch' with '-f'; see git-branch(1) for details."
      },
      {
        "argument": "--track",
        "arguments": "-t, --track",
        "description": "When creating a new branch, set up 'upstream' configuration.\nSee '--track' in git-branch(1) for details."
      },
      {
        "argument": "--no-track",
        "arguments": "--no-track",
        "description": "Do not set up 'upstream' configuration, even if the branch.autoSetupMerge configuration variable is true."
      },
      {
        "method_name": "new-branch-reflog",
        "argument": "-l",
        "arguments": "-l",
        "description": "Create the new branch’s reflog; see git-branch(1) for details."
      },
      {
        "argument": "--detach",
        "arguments": "--detach",
        "description": "Rather than checking out a branch to work on it, check out a commit for inspection and discardable experiments.\nThis is the default behavior of 'git checkout <commit>' when <commit> is not a branch name.\nSee the 'DETACHED HEAD' section below for details."
      },
      {
        "argument": "--orphan <new_branch>",
        "arguments": "--orphan <new_branch>",
        "description": "Create a new orphan branch, named <new_branch>, started from <start_point> and switch to it.\nThe first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from all the other branches and commits."
      },
      {
        "argument": "--ignore-skip-worktree-bits",
        "arguments": "--ignore-skip-worktree-bits",
        "description": "In sparse checkout mode, git checkout -- <paths> would update only entries matched by <paths> and sparse patterns in $GIT_DIR/info/sparse-checkout.\nThis option ignores the sparse patterns and adds back any files in <paths>."
      },
      {
        "argument": "--merge",
        "arguments": "-m, --merge",
        "description": "When switching branches, if you have local modifications to one or more files that are different between the current branch and the branch to which you are switching,\nthe command refuses to switch branches in order to preserve your modifications in context.\nHowever, with this option, a three-way merge between the current branch, your working tree contents, and the new branch is done, and you will be on the new branch."
      },
      {
        "argument": "--conflict=<style>",
        "arguments": "--conflict=<style>",
        "description": "The same as --merge option above, but changes the way the conflicting hunks are presented, overriding the merge.conflictStyle configuration variable.\nPossible values are 'merge' (default) and 'diff3' (in addition to what is shown by 'merge' style, shows the original contents)."
      },
      {
        "argument": "--patch",
        "arguments": "-p, --patch",
        "description": "Interactively select hunks in the difference between the <tree-ish> (or the index, if unspecified) and the working tree.\nThe chosen hunks are then applied in reverse to the working tree (and if a <tree-ish> was specified, the index)."
      },
      {
        "argument": "--ignore-other-worktrees",
        "arguments": "--ignore-other-worktrees",
        "description": "git checkout refuses when the wanted ref is already checked out by another worktree.\nThis option makes it check the ref out anyway.\nIn other words, the ref can be held by more than one worktree."
      },
      {
        "argument": "--recurse-submodules",
        "arguments": "--recurse-submodules",
        "description": "Using --recurse-submodules will update the content of all initialized submodules according to the commit recorded in the superproject.\nIf local modifications in a submodule would be overwritten the checkout will fail unless -f is used.\nIf nothing (or --no-recurse-submodules) is used, the work trees of submodules will not be updated."
      },
      {
        "argument": "--no-recurse-submodules",
        "arguments": "--no-recurse-submodules",
        "description": "Using --recurse-submodules will update the content of all initialized submodules according to the commit recorded in the superproject.\nIf local modifications in a submodule would be overwritten the checkout will fail unless -f is used.\nIf nothing (or --no-recurse-submodules) is used, the work trees of submodules will not be updated."
      },
      {
        "method_name": "hyphen_hyphen",
        "argument": "--",
        "arguments": "--",
        "description": "Do not interpret any more arguments as options."
      },
      {
        "method_name": "pathspec",
        "argument": "<pathspec>",
        "arguments": "<pathspec>",
        "description": "Limits the paths affected by the operation."
      },
      {
        "method_name": "branch",
        "argument": "<branch>",
        "arguments": "<branch>",
        "description": "Branch to checkout; if it refers to a branch (i.e., a name that, when prepended with \"refs/heads/\", is a valid ref), then that branch is checked out.\nOtherwise, if it refers to a valid commit, your HEAD becomes \"detached\" and you are no longer on any branch (see below for details)."
      }
    ]
  },
  {
    "section": "config",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-config",
    "description": "Get and set repository or global options.\nYou can query/set/replace/unset options with this command.\nThe name is actually the section and the key separated by a dot, and the value will be escaped.",
    "options": [
      {
        "argument": "--global",
        "arguments": "--global",
        "description": "For writing options: write to global ~/.gitconfig file rather than the repository .git/config, write to $XDG_CONFIG_HOME/git/config file if this file exists and the ~/.gitconfig file doesn’t."
      },
      {
        "argument": "--system",
        "arguments": "--system",
        "description": "For writing options: write to system-wide $(prefix)/etc/gitconfig rather than the repository .git/config."
      },
      {
        "argument": "--local",
        "arguments": "--local",
        "description": "For writing options: write to the repository .git/config file.\nThis is the default behavior."
      },
      {
        "argument": "--file <config-file>",
        "arguments": "-f <config-file>, --file <config-file>",
        "description": "Use the given config file instead of the one specified by GIT_CONFIG."
      },
      {
        "argument": "--blob <blob>",
        "arguments": "--blob <blob>",
        "description": "Similar to --file but use the given blob instead of a file.\nE.g.\nyou can use master:.gitmodules to read values from the file .gitmodules in the master branch."
      },
      {
        "argument": "--list",
        "arguments": "-l, --list",
        "description": "List all variables set in config file, along with their values."
      },
      {
        "argument": "--bool",
        "arguments": "--bool",
        "description": "git config will ensure that the output is 'true' or 'false'"
      },
      {
        "argument": "--int",
        "arguments": "--int",
        "description": "git config will ensure that the output is a simple decimal number.\nAn optional value suffix of k, m, or g in the config file will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output."
      },
      {
        "argument": "--bool-or-int",
        "arguments": "--bool-or-int",
        "description": "git config will ensure that the output matches the format of either --bool or --int, as described above."
      },
      {
        "argument": "--path",
        "arguments": "--path",
        "description": "git-config will expand leading ~ to the value of $HOME, and ~user to the home directory for the specified user.\nThis option has no effect when setting the value (but you can use git config bla ~/ from the command line to let your shell do the expansion)."
      },
      {
        "argument": "--null",
        "arguments": "-z, --null",
        "description": "For all options that output values and/or keys, always end values with the null character (instead of a newline).\nUse newline instead as a delimiter between key and value.\nThis allows for secure parsing of the output without getting confused e.g.\nby values that contain line breaks."
      },
      {
        "argument": "--name-only",
        "arguments": "--name-only",
        "description": "Output only the names of config variables for --list or --get-regexp."
      },
      {
        "argument": "--show-origin",
        "arguments": "--show-origin",
        "description": "Augment the output of all queried config options with the origin type (file, standard input, blob, command line)\nand the actual origin (config file path, ref, or blob id if applicable)."
      },
      {
        "argument": "--edit",
        "arguments": "-e, --edit",
        "description": "Opens an editor to modify the specified config file; either --system, --global, or repository (default)."
      }
    ]
  },
  {
    "section": "reset",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-reset",
    "description": "Reset current HEAD to the specified state",
    "options": [
      {
        "argument": "--soft",
        "arguments": "--soft",
        "description": "Does not touch the index file or the working tree at all (but resets the head to <commit>, just like all modes do).\nThis leaves all your changed files 'Changes to be committed', as git status would put it."
      },
      {
        "argument": "--mixed",
        "arguments": "--mixed",
        "description": "Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated.\nThis is the default action.\nIf -N is specified, removed paths are marked as intent-to-add (see git-add(1))."
      },
      {
        "argument": "--hard",
        "arguments": "--hard",
        "description": "Resets the index and working tree.\nAny changes to tracked files in the working tree since <commit> are discarded."
      },
      {
        "argument": "--merge",
        "arguments": "--merge",
        "description": "Resets the index and updates the files in the working tree that are different between <commit> and HEAD,\nbut keeps those which are different between the index and working tree (i.e.\nwhich have changes which have not been added).\nIf a file that is different between <commit> and the index has unstaged changes, reset is aborted.\n In other words, --merge does something like a git read-tree -u -m <commit>, but carries forward unmerged index entries."
      },
      {
        "argument": "--keep",
        "arguments": "--keep",
        "description": "Resets index entries and updates files in the working tree that are different between <commit> and HEAD.\nIf a file that is different between <commit> and HEAD has local changes, reset is aborted."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Be quiet, only report errors."
      },
      {
        "method_name": "hyphen_hyphen",
        "argument": "--",
        "arguments": "--",
        "description": "Do not interpret any more arguments as options"
      },
      {
        "method_name": "pathspec",
        "argument": "<pathspec>",
        "arguments": "<pathspec>",
        "description": "Limits the paths affected by the operation."
      }
    ]
  },
  {
    "section": "commit",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-commit",
    "description": "Record changes to the repository.\nCreate a new commit containing the current contents of the index and the given log message describing the changes.\nThe new commit is a direct child of HEAD, usually the tip of the current branch, and the branch is updated to point to it.",
    "options": [
      {
        "argument": "--message=<msg>",
        "arguments": "-m <msg>, --message=<msg>",
        "description": "Use the given <msg> as the commit message.\nIf multiple -m options are given, their values are concatenated as separate paragraphs."
      },
      {
        "argument": "--all",
        "arguments": "-a, --all",
        "description": "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."
      },
      {
        "argument": "--patch",
        "arguments": "-p, --patch",
        "description": "Use the interactive patch selection interface to chose which changes to commit.\nSee git-add(1) for details."
      },
      {
        "argument": "--reuse-message=<commit>",
        "arguments": "-C <commit>, --reuse-message=<commit>",
        "description": "Take an existing commit object, and reuse the log message and the authorship information (including the timestamp) when creating the commit."
      },
      {
        "argument": "--reedit-message=<commit>",
        "arguments": "-c <commit>, --reedit-message=<commit>",
        "description": "Like -C, but with -c the editor is invoked, so that the user can further edit the commit message."
      },
      {
        "argument": "--fixup=<commit>",
        "arguments": "--fixup=<commit>",
        "description": "Construct a commit message for use with rebase --autosquash.\nThe commit message will be the subject line from the specified commit with a prefix of 'fixup! '.\nSee git-rebase(1) for details."
      },
      {
        "argument": "--squash=<commit>",
        "arguments": "--squash=<commit>",
        "description": "Construct a commit message for use with rebase --autosquash.\nThe commit message subject line is taken from the specified commit with a prefix of 'squash! '.\nCan be used with additional commit message options (-m/-c/-C/-F).\nSee git-rebase(1) for details."
      },
      {
        "argument": "--reset-author",
        "arguments": "--reset-author",
        "description": "When used with -C/-c/--amend options, or when committing after a conflicting cherry-pick, declare that the authorship of the resulting commit now belongs to the committer.\nThis also renews the author timestamp."
      },
      {
        "argument": "--short",
        "arguments": "--short",
        "description": "When doing a dry-run, give the output in the short-format.\nSee git-status(1) for details.\nImplies --dry-run."
      },
      {
        "argument": "--branch",
        "arguments": "--branch",
        "description": "Show the branch and tracking info even in short-format."
      },
      {
        "argument": "--porcelain",
        "arguments": "--porcelain",
        "description": "When doing a dry-run, give the output in a porcelain-ready format.\nSee git-status(1) for details.\nImplies --dry-run."
      },
      {
        "argument": "--long",
        "arguments": "--long",
        "description": "When doing a dry-run, give the output in the long-format.\nImplies --dry-run."
      },
      {
        "argument": "--null",
        "arguments": "-z, --null",
        "description": "When showing short or porcelain status output, print the filename verbatim and terminate the entries with NUL, instead of LF.\nIf no format is given, implies the --porcelain output format.\nWithout the -z option, filenames with 'unusual' characters are quoted as explained for the configuration variable core.quotePath (see git-config(1))."
      },
      {
        "argument": "--file=<file>",
        "arguments": "-F <file>, --file=<file>",
        "description": "Take the commit message from the given file.\nUse - to read the message from the standard input."
      },
      {
        "argument": "--author=<author>",
        "arguments": "--author=<author>",
        "description": "Override the commit author.\nSpecify an explicit author using the standard A U Thor <author@example.com> format.\nOtherwise <author> is assumed to be a pattern and is used to search for an existing commit by that author (i.e.\nrev-list --all -i --author=<author>); the commit author is then copied from the first such commit found."
      },
      {
        "argument": "--date=<date>",
        "arguments": "--date=<date>",
        "description": "Override the author date used in the commit."
      },
      {
        "argument": "--template=<file>",
        "arguments": "-t <file>, --template=<file>",
        "description": "When editing the commit message, start the editor with the contents in the given file.\nThe commit.template configuration variable is often used to give this option implicitly to the command.\nThis mechanism can be used by projects that want to guide participants with some hints on what to write in the message in what order.\nIf the user exits the editor without editing the message, the commit is aborted.\nThis has no effect when a message is given by other means, e.g.\nwith the -m or -F options."
      },
      {
        "argument": "--signoff",
        "arguments": "-s, --signoff",
        "description": "Add Signed-off-by line by the committer at the end of the commit log message.\nThe meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see https://developercertificate.org/ for more information)."
      },
      {
        "argument": "--no-verify",
        "arguments": "-n, --no-verify",
        "description": "This option bypasses the pre-commit and commit-msg hooks.\nSee also githooks(5)."
      },
      {
        "argument": "--allow-empty",
        "arguments": "--allow-empty",
        "description": "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.\nThis option bypasses the safety, and is primarily for use by foreign SCM interface scripts."
      },
      {
        "argument": "--allow-empty-message",
        "arguments": "--allow-empty-message",
        "description": "Like --allow-empty this command is primarily for use by foreign SCM interface scripts.\nIt allows you to create a commit with an empty commit message without using plumbing commands like git-commit-tree(1)."
      },
      {
        "argument": "--cleanup=<mode>",
        "arguments": "--cleanup=<mode>",
        "description": "This option determines how the supplied commit message should be cleaned up before committing.\nThe <mode> can be strip, whitespace, verbatim, scissors or default."
      },
      {
        "argument": "--edit",
        "arguments": "-e, --edit",
        "description": "The message taken from file with -F, command line with -m, and from commit object with -C are usually used as the commit log message unmodified.\nThis option lets you further edit the message taken from these sources."
      },
      {
        "argument": "--no-edit",
        "arguments": "--no-edit",
        "description": "Use the selected commit message without launching an editor.\nFor example, git commit --amend --no-edit amends a commit without changing its commit message."
      },
      {
        "argument": "--amend",
        "arguments": "--amend",
        "description": "Replace the tip of the current branch by creating a new commit.\nThe recorded tree is prepared as usual (including the effect of the -i and -o options and explicit pathspec), and the message from the original commit is used as the starting point, instead of an empty message, when no other message is specified from the command line via options such as -m, -F, -c, etc.\nThe new commit has the same parents and author as the current one (the --reset-author option can countermand this)."
      },
      {
        "argument": "--no-post-rewrite",
        "arguments": "--no-post-rewrite",
        "description": "Bypass the post-rewrite hook."
      },
      {
        "argument": "--include",
        "arguments": "-i, --include",
        "description": "Before making a commit out of staged contents so far, stage the contents of paths given on the command line as well.\nThis is usually not what you want unless you are concluding a conflicted merge."
      },
      {
        "argument": "--only",
        "arguments": "-o, --only",
        "description": "Make a commit by taking the updated working tree contents of the paths specified on the command line, disregarding any contents that have been staged for other paths.\nThis is the default mode of operation of git commit if any paths are given on the command line, in which case this option can be omitted.\nIf this option is specified together with --amend, then no paths need to be specified, which can be used to amend the last commit without committing changes that have already been staged.\nIf used together with --allow-empty paths are also not required, and an empty commit will be created."
      },
      {
        "argument": "--untracked-files[=<mode>]",
        "arguments": "-u[<mode>], --untracked-files[=<mode>]",
        "description": "Show untracked files.\nThe mode parameter is optional (defaults to all), and is used to specify the handling of untracked files; when -u is not used, the default is normal, i.e.\nshow untracked files and directories."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "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.\nNote that this diff output doesn’t have its lines prefixed with #.\nThis diff will not be a part of the commit message.\nSee the commit.verbose configuration variable in git-config(1).\nIf specified twice, show in addition the unified diff between what would be committed and the worktree files, i.e.\nthe unstaged changes to tracked files."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Suppress commit summary message."
      },
      {
        "argument": "--dry-run",
        "arguments": "--dry-run",
        "description": "Do not create a commit, but show a list of paths that are to be committed,\npaths with local changes that will be left uncommitted and paths that are untracked."
      },
      {
        "argument": "--status",
        "arguments": "--status",
        "description": "Include the output of git-status(1) in the commit message template when using an editor to prepare the commit message.\nDefaults to on, but can be used to override configuration variable commit.status."
      },
      {
        "argument": "--no-status",
        "arguments": "--no-status",
        "description": "Do not include the output of git-status(1) in the commit message template when using an editor to prepare the default commit message."
      },
      {
        "argument": "--gpg-sign[=<keyID>]",
        "arguments": "-S[<keyid>], --gpg-sign[=<keyid>]",
        "description": "GPG-sign commits.\nThe keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space."
      },
      {
        "argument": "--no-gpg-sign",
        "arguments": "--no-gpg-sign",
        "description": "Countermand commit.gpgSign configuration variable that is set to force each and every commit to be signed."
      },
      {
        "method_name": "hyphen_hyphen",
        "argument": "--",
        "arguments": "--",
        "description": "Do not interpret any more arguments as options"
      },
      {
        "method_name": "pathspec",
        "argument": "<pathspec>",
        "arguments": "<pathspec>",
        "description": "When pathspec is given on the command line, commit the contents of the files that match the pathspec without recording the changes already added to the index.\nThe contents of these files are also staged for the next commit on top of what have been staged before."
      }
    ]
  },
  {
    "section": "add",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-add",
    "description": "Add file contents to the index.\nThis command updates the index using the current content found in the working tree, to prepare the content staged for the next commit.\nIt typically adds the current content of existing paths as a whole, but with some options it can also be used to add content with only part of the changes made to the working tree files applied, or remove paths that do not exist in the working tree anymore.",
    "options": [
      {
        "argument": "--dry-run",
        "arguments": "-n, --dry-run",
        "description": "Don't actually add the file(s), just show if they exist and/or will be ignored."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "Be verbose."
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "Allow adding otherwise ignored files."
      },
      {
        "argument": "--interactive",
        "arguments": "-i, --interactive",
        "description": "Add modified contents in the working tree interactively to the index.\nOptional path arguments may be supplied to limit operation to a subset of the working tree.\nSee 'Interactive mode' for details."
      },
      {
        "argument": "--patch",
        "arguments": "-p, --patch",
        "description": "Interactively choose hunks of patch between the index and the work tree and add them to the index.\nThis gives the user a chance to review the difference before adding modified contents to the index.\nThis effectively runs add --interactive, but bypasses the initial command menu and directly jumps to the patch subcommand.\nSee “Interactive mode” for details."
      },
      {
        "argument": "--edit",
        "arguments": "-e, --edit",
        "description": "Open the diff vs.\nthe index in an editor and let the user edit it.\nAfter the editor was closed, adjust the hunk headers and apply the patch to the index.\nThe intent of this option is to pick and choose lines of the patch to apply, or even to modify the contents of lines to be staged.\nThis can be quicker and more flexible than using the interactive hunk selector.\nHowever, it is easy to confuse oneself and create a patch that does not apply to the index.\nSee EDITING PATCHES below."
      },
      {
        "argument": "--update",
        "arguments": "-u, --update",
        "description": "Update the index just where it already has an entry matching <pathspec>.\nThis removes as well as modifies index entries to match the working tree, but adds no new files.\nIf no <pathspec> is given when -u option is used, all tracked files in the entire working tree are updated (old versions of Git used to limit the update to the current directory and its subdirectories)."
      },
      {
        "argument": "--all",
        "arguments": "-A, --all, --no-ignore-removal",
        "description": "Update the index not only where the working tree has a file matching <pathspec> but also where the index already has an entry.\nThis adds, modifies, and removes index entries to match the working tree.\nIf no <pathspec> is given when -A option is used, all files in the entire working tree are updated (old versions of Git used to limit the update to the current directory and its subdirectories)."
      },
      {
        "argument": "--no-all",
        "arguments": "--no-all, --ignore-removal",
        "description": "Update the index by adding new files that are unknown to the index and files modified in the working tree, but ignore files that have been removed from the working tree.\nThis option is a no-op when no <pathspec> is used.\nThis option is primarily to help users who are used to older versions of Git, whose 'git add <pathspec>...' was a synonym for 'git add --no-all <pathspec>...', i.e.\nignored removed files."
      },
      {
        "argument": "--intent-to-add",
        "arguments": "-N, --intent-to-add",
        "description": "Record only the fact that the path will be added later.\nAn entry for the path is placed in the index with no content.\nThis is useful for, among other things, showing the unstaged content of such files with git diff and committing them with git commit -a."
      },
      {
        "argument": "--refresh",
        "arguments": "--refresh",
        "description": "Don't add the file(s), but only refresh their stat() information in the index."
      },
      {
        "argument": "--ignore-errors",
        "arguments": "--ignore-errors",
        "description": "If some files could not be added because of errors indexing them, do not abort the operation, but continue adding the others.\nThe command shall still exit with non-zero status.\nThe configuration variable add.ignoreErrors can be set to true to make this the default behaviour."
      },
      {
        "argument": "--ignore-missing",
        "arguments": "--ignore-missing",
        "description": "This option can only be used together with --dry-run.\nBy using this option the user can check if any of the given files would be ignored, no matter if they are already present in the work tree or not."
      },
      {
        "method_name": "hyphen_hyphen",
        "argument": "--",
        "arguments": "--",
        "description": "This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for command-line options)"
      },
      {
        "method_name": "pathspec",
        "argument": "<pathspec>",
        "arguments": "<pathspec>",
        "description": "Files to add content from.\nFileglobs (e.g.\n*.c) can be given to add all matching files.\nAlso a leading directory name (e.g.\ndir to add dir/file1 and dir/file2) can be given to update the index to match the current state of the directory as a whole (e.g.\nspecifying dir will record not just a file dir/file1 modified in the working tree, a file dir/file2 added to the working tree, but also a file dir/file3 removed from the working tree).\nNote that older versions of Git used to ignore removed files; use --no-all option if you want to add modified or new files but ignore removed ones."
      }
    ]
  },
  {
    "section": "merge",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-merge",
    "description": "Join two or more development histories together.\nIncorporates changes from the named commits (since the time their histories diverged from the current branch) into the current branch.\nThis command is used by git pull to incorporate changes from another repository and can be used by hand to merge changes from one branch into another.",
    "options": [
      {
        "argument": "--commit",
        "arguments": "--commit, --no-commit",
        "description": "Perform the merge and commit the result.\nThis option can be used to override --no-commit."
      },
      {
        "argument": "--no-commit",
        "arguments": "--commit, --no-commit",
        "description": "With --no-commit perform the merge but pretend the merge failed and do not autocommit,\nto give the user a chance to inspect and further tweak the merge result before committing."
      },
      {
        "argument": "--edit",
        "arguments": "--edit, -e, --no-edit",
        "description": "Invoke an editor before committing successful mechanical merge to further edit the auto-generated merge message,\nso that the user can explain and justify the merge.\nThe --no-edit option can be used to accept the auto-generated message (this is generally discouraged).\nThe --edit (or -e) option is still useful if you are giving a draft message with the -m option from the command line and want to edit it in the editor.\nOlder scripts may depend on the historical behaviour of not allowing the user to edit the merge log message.\nThey will see an editor opened when they run git merge.\nTo make it easier to adjust such scripts to the updated behaviour, the environment variable GIT_MERGE_AUTOEDIT can be set to no at the beginning of them."
      },
      {
        "argument": "--no-edit",
        "arguments": "--edit, -e, --no-edit",
        "description": "Invoke an editor before committing successful mechanical merge to further edit the auto-generated merge message,\nso that the user can explain and justify the merge.\nThe --no-edit option can be used to accept the auto-generated message (this is generally discouraged).\nThe --edit (or -e) option is still useful if you are giving a draft message with the -m option from the command line and want to edit it in the editor.\nOlder scripts may depend on the historical behaviour of not allowing the user to edit the merge log message.\nThey will see an editor opened when they run git merge.\nTo make it easier to adjust such scripts to the updated behaviour, the environment variable GIT_MERGE_AUTOEDIT can be set to no at the beginning of them."
      },
      {
        "argument": "--ff",
        "arguments": "--ff",
        "description": "When the merge resolves as a fast-forward, only update the branch pointer, without creating a merge commit.\nThis is the default behavior."
      },
      {
        "argument": "--no-ff",
        "arguments": "--no-ff",
        "description": "Create a merge commit even when the merge resolves as a fast-forward.\nThis is the default behaviour when merging an annotated (and possibly signed) tag."
      },
      {
        "argument": "--ff-only",
        "arguments": "--ff-only",
        "description": "Refuse to merge and exit with a non-zero status unless the current HEAD is already up-to-date or the merge can be resolved as a fast-forward."
      },
      {
        "argument": "--log[=<n>]",
        "arguments": "--log[=<n>], --no-log",
        "description": "In addition to branch names, populate the log message with one-line descriptions from at most <n> actual commits that are being merged.\nSee also git-fmt-merge-msg(1).\nWith --no-log do not list one-line descriptions from the actual commits being merged."
      },
      {
        "argument": "--no-log",
        "arguments": "--log[=<n>], --no-log",
        "description": "In addition to branch names, populate the log message with one-line descriptions from at most <n> actual commits that are being merged.\nSee also git-fmt-merge-msg(1).\nWith --no-log do not list one-line descriptions from the actual commits being merged."
      },
      {
        "argument": "--stat",
        "arguments": "--stat, -n, --no-stat",
        "description": "Show a diffstat at the end of the merge.\nThe diffstat is also controlled by the configuration option merge.stat.\nWith -n or --no-stat do not show a diffstat at the end of the merge."
      },
      {
        "argument": "--no-stat",
        "arguments": "--stat, -n, --no-stat",
        "description": "Show a diffstat at the end of the merge.\nThe diffstat is also controlled by the configuration option merge.stat.\nWith -n or --no-stat do not show a diffstat at the end of the merge."
      },
      {
        "argument": "--squash",
        "arguments": "--squash, --no-squash",
        "description": "Produce the working tree and index state as if a real merge happened (except for the merge information),\nbut do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit).\nThis allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus).\nWith --no-squash perform the merge and commit the result.\nThis option can be used to override --squash."
      },
      {
        "argument": "--no-squash",
        "arguments": "--squash, --no-squash",
        "description": "Produce the working tree and index state as if a real merge happened (except for the merge information),\nbut do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit).\nThis allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus).\nWith --no-squash perform the merge and commit the result.\nThis option can be used to override --squash."
      },
      {
        "argument": "--strategy=<strategy>",
        "arguments": "-s <strategy>, --strategy=<strategy>",
        "description": "Use the given merge strategy; can be supplied more than once to specify them in the order they should be tried.\nIf there is no -s option, a built-in list of strategies is used instead (git merge-recursive when merging a single head, git merge-octopus otherwise)."
      },
      {
        "argument": "--strategy-option=<option>",
        "arguments": "-X <option>, --strategy-option=<option>",
        "description": "Pass merge strategy specific option through to the merge strategy."
      },
      {
        "argument": "--verify-signatures",
        "arguments": "--verify-signatures, --no-verify-signatures",
        "description": "Verify that the tip commit of the side branch being merged is signed with a valid key, i.e.\na key that has a valid uid: in the default trust model,\nthis means the signing key has been signed by a trusted key.\nIf the tip commit of the side branch is not signed with a valid key, the merge is aborted."
      },
      {
        "argument": "--no-verify-signatures",
        "arguments": "--verify-signatures, --no-verify-signatures",
        "description": "Verify that the tip commit of the side branch being merged is signed with a valid key, i.e.\na key that has a valid uid: in the default trust model,\nthis means the signing key has been signed by a trusted key.\nIf the tip commit of the side branch is not signed with a valid key, the merge is aborted."
      },
      {
        "argument": "--summary",
        "arguments": "--summary, --no-summary",
        "description": "Synonyms to --stat and --no-stat; these are deprecated and will be removed in the future."
      },
      {
        "argument": "--no-summary",
        "arguments": "--summary, --no-summary",
        "description": "Synonyms to --stat and --no-stat; these are deprecated and will be removed in the future."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Operate quietly.\nImplies --no-progress."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "Be verbose."
      },
      {
        "argument": "--progress",
        "arguments": "--progress, --no-progress",
        "description": "Turn progress on/off explicitly.\nIf neither is specified, progress is shown if standard error is connected to a terminal.\nNote that not all merge strategies may support progress reporting."
      },
      {
        "argument": "--no-progress",
        "arguments": "--progress, --no-progress",
        "description": "Turn progress on/off explicitly.\nIf neither is specified, progress is shown if standard error is connected to a terminal.\nNote that not all merge strategies may support progress reporting."
      },
      {
        "argument": "--allow-unrelated-histories",
        "arguments": "--allow-unrelated-histories",
        "description": "By default, git merge command refuses to merge histories that do not share a common ancestor.\nThis option can be used to override this safety when merging histories of two projects that started their lives independently.\nAs that is a very rare occasion, no configuration variable to enable this by default exists and will not be added."
      },
      {
        "argument": "--gpg-sign[=<keyID>]",
        "arguments": "-S[<keyid>], --gpg-sign[=<keyid>]",
        "description": "GPG-sign the resulting merge commit.\nThe keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space."
      },
      {
        "argument": "-m <msg>",
        "arguments": "-m <msg>",
        "description": "Set the commit message to be used for the merge commit (in case one is created).\nIf --log is specified, a shortlog of the commits being merged will be appended to the specified message.\nThe git fmt-merge-msg command can be used to give a good default for automated git merge invocations.\nThe automated message can include the branch description."
      },
      {
        "argument": "--rerere-autoupdate",
        "arguments": "--[no-]rerere-autoupdate",
        "description": "Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible."
      },
      {
        "argument": "--no-rerere-autoupdate",
        "arguments": "--[no-]rerere-autoupdate",
        "description": "Allow the rerere mechanism to update the index with the result of auto-conflict resolution if possible."
      },
      {
        "argument": "--abort",
        "arguments": "--abort",
        "description": "Abort the current conflict resolution process, and try to reconstruct the pre-merge state.\nIf there were uncommitted worktree changes present when the merge started, git merge --abort will in some cases be unable to reconstruct these changes.\nIt is therefore recommended to always commit or stash your changes before running git merge.\ngit merge --abort is equivalent to git reset --merge when MERGE_HEAD is present."
      },
      {
        "method_name": "continue-merge",
        "argument": "--continue",
        "arguments": "--continue",
        "description": "After a git merge stops due to conflicts you can conclude the merge by running git merge --continue (see 'HOW TO RESOLVE CONFLICTS' section below)."
      }
    ]
  },
  {
    "section": "rev-parse",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-rev-parse",
    "description": "Pick out and massage parameters.\n",
    "options": [
      {
        "argument": "--parseopt",
        "arguments": "--parseopt",
        "description": "Use git rev-parse in option parsing mode (see PARSEOPT section below)."
      },
      {
        "argument": "--sq-quote",
        "arguments": "--sq-quote",
        "description": "Use git rev-parse in shell quoting mode (see SQ-QUOTE section below).\nIn contrast to the --sq option below, this mode does only quoting.\nNothing else is done to command input."
      },
      {
        "argument": "--keep-dashdash",
        "arguments": "--keep-dashdash",
        "description": "Only meaningful in --parseopt mode.\nTells the option parser to echo out the first -- met instead of skipping it."
      },
      {
        "argument": "--stop-at-non-option",
        "arguments": "--stop-at-non-option",
        "description": "Only meaningful in --parseopt mode.\nLets the option parser stop at the first non-option argument.\nThis can be used to parse sub-commands that take options themselves."
      },
      {
        "argument": "--stuck-long",
        "arguments": "--stuck-long",
        "description": "Only meaningful in --parseopt mode.\nOutput the options in their long form if available, and with their arguments stuck."
      },
      {
        "argument": "--revs-only",
        "arguments": "--revs-only",
        "description": "Do not output flags and parameters not meant for git rev-list command."
      },
      {
        "argument": "--no-revs",
        "arguments": "--no-revs",
        "description": "Do not output flags and parameters meant for git rev-list command."
      },
      {
        "argument": "--flags",
        "arguments": "--flags",
        "description": "Do not output non-flag parameters."
      },
      {
        "argument": "--no-flags",
        "arguments": "--no-flags",
        "description": "Do not output flag parameters."
      },
      {
        "argument": "--default <arg>",
        "arguments": "--default <arg>",
        "description": "If there is no parameter given by the user, use <arg> instead."
      },
      {
        "argument": "--prefix <arg>",
        "arguments": "--prefix <arg>",
        "description": "Behave as if git rev-parse was invoked from the <arg> subdirectory of the working tree.\nAny relative filenames are resolved as if they are prefixed by <arg> and will be printed in that form.\nThis can be used to convert arguments to a command run in a subdirectory so that they can still be used after moving to the top-level of the repository."
      },
      {
        "argument": "--verify",
        "arguments": "--verify",
        "description": "Verify that exactly one parameter is provided, and that it can be turned into a raw 20-byte SHA-1 that can be used to access the object database.\nIf so, emit it to the standard output; otherwise, error out."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Only meaningful in --verify mode.\nDo not output an error message if the first argument is not a valid object name; instead exit with non-zero status silently.\nSHA-1s for valid object names are printed to stdout on success."
      },
      {
        "argument": "--sq",
        "arguments": "--sq",
        "description": "Usually the output is made one line per flag and parameter.\nThis option makes output a single line, properly quoted for consumption by shell.\nUseful when you expect your parameter to contain whitespaces and newlines (e.g.\nwhen using pickaxe -S with git diff-*).\nIn contrast to the --sq-quote option, the command input is still interpreted as usual."
      },
      {
        "argument": "--short[=length]",
        "arguments": "--short[=length]",
        "description": "Same as --verify but shortens the object name to a unique prefix with at least length characters.\nThe minimum length is 4, the default is the effective value of the core.abbrev configuration variable (see git-config(1))."
      },
      {
        "argument": "--not",
        "arguments": "--not",
        "description": "When showing object names, prefix them with ^ and strip ^ prefix from the object names that already have one."
      },
      {
        "argument": "--abbrev-ref[=(strict|loose)]",
        "arguments": "--abbrev-ref[=(strict|loose)]",
        "description": "A non-ambiguous short name of the objects name.\nThe option core.warnAmbiguousRefs is used to select the strict abbreviation mode."
      },
      {
        "argument": "--symbolic",
        "arguments": "--symbolic",
        "description": "Usually the object names are output in SHA-1 form (with possible ^ prefix); this option makes them output in a form as close to the original input as possible."
      },
      {
        "argument": "--symbolic-full-name",
        "arguments": "--symbolic-full-name",
        "description": "This is similar to --symbolic, but it omits input that are not refs\n(i.e.\nbranch or tag names; or more explicitly disambiguating 'heads/master' form, when you want to name the 'master' branch when there is an unfortunately named tag 'master'),\nand show them as full refnames (e.g.\n'refs/heads/master')."
      },
      {
        "argument": "--all",
        "arguments": "--all",
        "description": "Show all refs found in refs/."
      },
      {
        "argument": "--branches[=pattern]",
        "arguments": "--branches[=pattern], --tags[=pattern], --remotes[=pattern]",
        "description": "Show all branches, tags, or remote-tracking branches, respectively (i.e., refs found in refs/heads, refs/tags, or refs/remotes, respectively).\nIf a pattern is given, only refs matching the given shell glob are shown.\nIf the pattern does not contain a globbing character (?, *, or [), it is turned into a prefix match by appending /*."
      },
      {
        "argument": "--tags[=pattern]",
        "arguments": "--branches[=pattern], --tags[=pattern], --remotes[=pattern]",
        "description": "Show all branches, tags, or remote-tracking branches, respectively (i.e., refs found in refs/heads, refs/tags, or refs/remotes, respectively).\nIf a pattern is given, only refs matching the given shell glob are shown.\nIf the pattern does not contain a globbing character (?, *, or [), it is turned into a prefix match by appending /*."
      },
      {
        "argument": "--remotes[=pattern]",
        "arguments": "--branches[=pattern], --tags[=pattern], --remotes[=pattern]",
        "description": "Show all branches, tags, or remote-tracking branches, respectively (i.e., refs found in refs/heads, refs/tags, or refs/remotes, respectively).\nIf a pattern is given, only refs matching the given shell glob are shown.\nIf the pattern does not contain a globbing character (?, *, or [), it is turned into a prefix match by appending /*."
      },
      {
        "argument": "--glob=<pattern>",
        "arguments": "--glob=pattern",
        "description": "Show all refs matching the shell glob pattern pattern.\nIf the pattern does not start with refs/, this is automatically prepended.\nIf the pattern does not contain a globbing character (?, *, or [), it is turned into a prefix match by appending /*."
      },
      {
        "argument": "--exclude=<glob-pattern>",
        "arguments": "--exclude=<glob-pattern>",
        "description": "Do not include refs matching <glob-pattern> that the next --all, --branches, --tags, --remotes, or --glob would otherwise consider.\nRepetitions of this option accumulate exclusion patterns up to the next --all, --branches, --tags, --remotes, or --glob option (other options or arguments do not clear accumulated patterns).\nThe patterns given should not begin with refs/heads, refs/tags, or refs/remotes when applied to --branches, --tags, or --remotes, respectively, and they must begin with refs/ when applied to --glob or --all.\nIf a trailing /* is intended, it must be given explicitly."
      },
      {
        "argument": "--disambiguate=<prefix>",
        "arguments": "--disambiguate=<prefix>",
        "description": "Show every object whose name begins with the given prefix.\nThe <prefix> must be at least 4 hexadecimal digits long to avoid listing each and every object in the repository by mistake."
      },
      {
        "argument": "--local-env-vars",
        "arguments": "--local-env-vars",
        "description": "List the GIT_* environment variables that are local to the repository (e.g.\nGIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR).\nOnly the names of the variables are listed, not their value, even if they are set."
      },
      {
        "argument": "--git-dir",
        "arguments": "--git-dir",
        "description": "Show $GIT_DIR if defined.\nOtherwise show the path to the .git directory.\nThe path shown, when relative, is relative to the current working directory.\nIf $GIT_DIR is not defined and the current directory is not detected to lie in a Git repository or work tree print a message to stderr and exit with nonzero status."
      },
      {
        "argument": "--absolute-git-dir",
        "arguments": "--absolute-git-dir",
        "description": "Like --git-dir, but its output is always the canonicalized absolute path."
      },
      {
        "argument": "--git-common-dir",
        "arguments": "--git-common-dir",
        "description": "Show $GIT_COMMON_DIR if defined, else $GIT_DIR."
      },
      {
        "argument": "--is-inside-git-dir",
        "arguments": "--is-inside-git-dir",
        "description": "When the current working directory is below the repository directory print 'true', otherwise 'false'."
      },
      {
        "argument": "--is-inside-work-tree",
        "arguments": "--is-inside-work-tree",
        "description": "When the current working directory is inside the work tree of the repository print 'true', otherwise 'false'."
      },
      {
        "argument": "--is-bare-repository",
        "arguments": "--is-bare-repository",
        "description": "When the repository is bare print 'true', otherwise 'false'."
      },
      {
        "argument": "--resolve-git-dir <path>",
        "arguments": "--resolve-git-dir <path>",
        "description": "Check if <path> is a valid repository or a gitfile that points at a valid repository, and print the location of the repository.\nIf <path> is a gitfile then the resolved path to the real repository is printed."
      },
      {
        "argument": "--git-path <path>",
        "arguments": "--git-path <path>",
        "description": "Resolve '$GIT_DIR/<path>' and takes other path relocation variables such as $GIT_OBJECT_DIRECTORY, $GIT_INDEX_FILE...\ninto account.\nFor example, if $GIT_OBJECT_DIRECTORY is set to /foo/bar then 'git rev-parse --git-path objects/abc' returns /foo/bar/abc."
      },
      {
        "argument": "--show-cdup",
        "arguments": "--show-cdup",
        "description": "When the command is invoked from a subdirectory,\nshow the path of the top-level directory relative to the current directory (typically a sequence of '../', or an empty string)."
      },
      {
        "argument": "--show-prefix",
        "arguments": "--show-prefix",
        "description": "When the command is invoked from a subdirectory,\nshow the path of the current directory relative to the top-level directory."
      },
      {
        "argument": "--show-toplevel",
        "arguments": "--show-toplevel",
        "description": "Show the absolute path of the top-level directory."
      },
      {
        "argument": "--show-superproject-working-tree",
        "arguments": "--show-superproject-working-tree",
        "description": "Show the absolute path of the root of the superproject’s working tree (if exists) that uses the current repository as its submodule.\nOutputs nothing if the current repository is not used as a submodule by any project."
      },
      {
        "argument": "--shared-index-path",
        "arguments": "--shared-index-path",
        "description": "Show the path to the shared index file in split index mode, or empty if not in split-index mode."
      },
      {
        "argument": "--since=<datestring>",
        "arguments": "--since=datestring, --after=datestring",
        "description": "Parse the date string, and output the corresponding --max-age= parameter for git rev-list."
      },
      {
        "argument": "-after=<datestring>",
        "arguments": "--since=datestring, --after=datestring",
        "description": "Parse the date string, and output the corresponding --max-age= parameter for git rev-list."
      },
      {
        "argument": "--until=<datestring>",
        "arguments": "--until=datestring, --before=datestring",
        "description": "Parse the date string, and output the corresponding --min-age= parameter for git rev-list."
      },
      {
        "argument": "--before=<datestring>",
        "arguments": "--until=datestring, --before=datestring",
        "description": "Parse the date string, and output the corresponding --min-age= parameter for git rev-list."
      }
    ]
  },
  {
    "section": "tag",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-tag",
    "description": "Create, list, delete or verify a tag object signed with GPG",
    "options": [
      {
        "argument": "--annotate",
        "arguments": "-a, --annotate",
        "description": "Make an unsigned, annotated tag object."
      },
      {
        "argument": "--sign",
        "arguments": "-s, --sign",
        "description": "Make a GPG-signed tag, using the default e-mail address’s key."
      },
      {
        "argument": "--local-user=<keyID>",
        "arguments": "-u <keyid>, --local-user=<keyid>",
        "description": "Make a GPG-signed tag, using the given key."
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "Replace an existing tag with the given name (instead of failing)."
      },
      {
        "argument": "--verify",
        "arguments": "-v, --verify",
        "description": "Verify the GPG signature of the given tag names."
      },
      {
        "argument": "-n<num>",
        "arguments": "-n<num>",
        "description": "<num> specifies how many lines from the annotation,\nif any, are printed when using -l.\nImplies --list.\nThe default is not to print any annotation lines.\nIf no number is given to -n, only the first line is printed.\nIf the tag is not annotated, the commit message is displayed instead."
      },
      {
        "argument": "--list",
        "arguments": "-l, --list",
        "description": "List tags.\nWith optional <pattern>..., e.g.\n git tag --list 'v-*', list only the tags that match the pattern(s).\nRunning \"git tag\" without arguments also lists all tags.\nThe pattern is a shell wildcard (i.e., matched using fnmatch(3)).\nMultiple patterns may be given; if any of them matches, the tag is shown.\nThis option is implicitly supplied if any other list-like option such as --contains is provided.\nSee the documentation for each of those options for details."
      },
      {
        "argument": "--sort=<key>",
        "arguments": "--sort=<key>",
        "description": "Sort based on the key given.\nPrefix - to sort in descending order of the value.\nYou may use the --sort=<key> option multiple times, in which case the last key becomes the primary key.\nAlso\nsupports \"version:refname\" or \"v:refname\" (tag names are treated as versions).\nThe \"version:refname\" sort order can also be affected by the \"versionsort.suffix\" configuration variable.\nThe keys \nsupported are the same as those in git for-each-ref.\nSort order defaults to the value configured for the tag.sort variable if it exists, or lexicographic order otherwise.\nSee git-config(1)."
      },
      {
        "argument": "--color[=<when>]",
        "arguments": "--color[=<when>]",
        "description": "Respect any colors specified in the --format option.\nThe <when> field must be one of always, never, or auto (if <when> is absent, behave as if always was given)."
      },
      {
        "argument": "--ignore-case",
        "arguments": "-i, --ignore-case",
        "description": "Sorting and filtering tags are case insensitive."
      },
      {
        "argument": "--column[=<options>]",
        "arguments": "--column[=<options>]",
        "description": "Display tag listing in columns.\nSee configuration variable column.tag for option syntax.--column and --no-column without options are equivalent to always and never respectively.\n This option is only applicable when listing tags without annotation lines."
      },
      {
        "argument": "--no-column",
        "arguments": "--no-column",
        "description": "Display tag listing in columns.\nSee configuration variable column.tag for option syntax.--column and --no-column without options are equivalent to always and never respectively.\n This option is only applicable when listing tags without annotation lines."
      },
      {
        "argument": "--contains[=<commit>]",
        "arguments": "--contains [<commit>]",
        "description": "Only list tags which contain the specified commit (HEAD if not specified).\nImplies --list."
      },
      {
        "argument": "--no-contains[=<commit>]",
        "arguments": "--no-contains [<commit>]",
        "description": "Only list tags which don’t contain the specified commit (HEAD if not specified).\nImplies --list."
      },
      {
        "argument": "--merged[=<commit>]",
        "arguments": "--merged [<commit>]",
        "description": "Only list tags whose commits are reachable from the specified commit (HEAD if not specified), incompatible with --no-merged."
      },
      {
        "argument": "--no-merged[=<commit>]",
        "arguments": "--no-merged [<commit>]",
        "description": "Only list tags whose commits are not reachable from the specified commit (HEAD if not specified), incompatible with --merged."
      },
      {
        "argument": "--points-at <object>",
        "arguments": "--points-at <object>",
        "description": "Only list tags of the given object (HEAD if not specified).\nImplies --list."
      },
      {
        "argument": "--message=<msg>",
        "arguments": "-m <msg>, --message=<msg>",
        "description": "Use the given tag message (instead of prompting).\nIf multiple -m options are given, their values are concatenated as separate paragraphs.\nImplies -a if none of -a, -s, or -u <keyid> is given."
      },
      {
        "argument": "--file=<file>",
        "arguments": "-F <file>, --file=<file>",
        "description": "Take the tag message from the given file.\nUse - to read the message from the standard input.\nImplies -a if none of -a, -s, or -u <keyid> is given."
      },
      {
        "argument": "--edit",
        "arguments": "-e, --edit",
        "description": "The message taken from file with -F and command line with -m are usually used as the tag message unmodified.\nThis option lets you further edit the message taken from these sources."
      },
      {
        "argument": "--cleanup=<mode>",
        "arguments": "--cleanup=<mode>",
        "description": "This option sets how the tag message is cleaned up.\nThe <mode> can be one of verbatim, whitespace and strip.\nThe strip mode is default.\nThe verbatim mode does not change message at all, whitespace\n removes just leading/trailing whitespace lines and strip removes both whitespace and commentary."
      },
      {
        "argument": "--create-reflog",
        "arguments": "--create-reflog",
        "description": "Create a reflog for the tag.\nTo globally enable reflogs for tags, see core.logAllRefUpdates in git-config(1).\nThe negated form --no-create-reflog only overrides an earlier --create-reflog, but\n currently does not negate the setting of core.logAllRefUpdates."
      }
    ]
  },
  {
    "section": "status",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-status",
    "description": "Show the working tree status.\nDisplays paths that have differences between the index file and the current HEAD commit, paths that have differences between the working tree and the index file, and paths in the working tree that are not tracked by Git",
    "options": [
      {
        "argument": "--short",
        "arguments": "-s, --short",
        "description": "Give the output in the short-format."
      },
      {
        "argument": "--branch",
        "arguments": "-b, --branch",
        "description": "Show the branch and tracking info even in short-format."
      },
      {
        "argument": "--show-stash",
        "arguments": "--show-stash",
        "description": "Show the number of entries currently stashed away."
      },
      {
        "argument": "--porcelain[=<version>]",
        "arguments": "--porcelain[=<version>]",
        "description": "Give the output in an easy-to-parse format for scripts.\nThis is similar to the short output, but will remain stable across Git versions and regardless of user configuration.\nSee below for details.\nThe version parameter is used to specify the format version.\nThis is optional and defaults to the original version v1 format."
      },
      {
        "argument": "--long",
        "arguments": "--long",
        "description": "Give the output in the long-format.\nThis is the default."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "In addition to the names of files that have been changed,\nalso show the textual changes that are staged to be committed (i.e., like the output of git diff --cached).\nIf -v is specified twice, then also show the changes in the working tree that have not yet been staged (i.e., like the output of git diff)."
      },
      {
        "argument": "--untracked-files[=<mode>]",
        "arguments": "-u[<mode>], --untracked-files[=<mode>]",
        "description": "Show untracked files.\nThe mode parameter is used to specify the handling of untracked files.\nIt is optional: it defaults to all, and if specified, it must be stuck to the option (e.g.\n -uno, but not -u no).\nThe possible options are:\n•   no - Show no untracked files.\n•   normal - Shows untracked files and directories.\n•   all - Also shows individual files in untracked directories.\nWhen -u option is not used, untracked files and directories are shown (i.e.\nthe same as specifying normal), to help you avoid forgetting to add newly created files.\nBecause it takes extra\nwork to find untracked files in the filesystem, this mode may take some time in a large working tree.\nConsider enabling untracked cache and split index if supported (see git update-index\n--untracked-cache and git update-index --split-index), Otherwise you can use no to have git status return more quickly without showing untracked files.\nThe default can be changed using the status.showUntrackedFiles configuration variable documented in git-config(1)."
      },
      {
        "argument": "--ignore-submodules[=<when>]",
        "arguments": "--ignore-submodules[=<when>]",
        "description": "Ignore changes to submodules when looking for changes.\n<when> can be either \"none\", \"untracked\", \"dirty\" or \"all\", which is the default.\nUsing \"none\" will consider the submodule modified when it either contains untracked or modified files or its HEAD differs from the commit recorded in the superproject and can be used to override any settings of the ignore option in git- config(1) or gitmodules(5).\nWhen \"untracked\" is used submodules are not considered dirty when they only contain untracked content (but they are still scanned for modified content).\nUsing \"dirty\" ignores all changes to the work tree of submodules, only changes to the commits stored in the superproject are shown (this was the behavior before 1.7.0).\nUsing \"all\" hides all changes to submodules (and suppresses the output of submodule summaries when the config option status.submoduleSummary is set)."
      },
      {
        "argument": "--ignored[=<mode>]",
        "arguments": "--ignored[=<mode>]",
        "description": "Show ignored files as well.\nThe mode parameter is used to specify the handling of ignored files.\nIt is optional: it defaults to traditional.\nThe possible options are:\n•   traditional - Shows ignored files and directories, unless --untracked-files=all is specified, in which case individual files in ignored directories are displayed.\n•   no - Show no ignored files.\n•   matching - Shows ignored files and directories matching an ignore pattern.\nWhen matching mode is specified, paths that explicitly match an ignored pattern are shown.\nIf a directory matches an ignore pattern, then it is shown, but not paths contained in the ignored directory.\nIf a directory does not match an ignore pattern, but all contents are ignored, then the directory is not shown, but all contents are shown."
      },
      {
        "argument": "--null",
        "arguments": "-z, --null",
        "description": "Terminate entries with NUL, instead of LF.\nThis implies the --porcelain=v1 output format if no other format is given."
      },
      {
        "argument": "--column[=<options>]",
        "arguments": "--column[=<options>], --no-column",
        "description": "Display untracked files in columns.\nSee configuration variable column.status for option syntax.\n--column and --no-column without options are equivalent to always and never respectively."
      },
      {
        "argument": "--no-column",
        "arguments": "--column[=<options>], --no-column",
        "description": "Display untracked files in columns.\nSee configuration variable column.status for option syntax.\n--column and --no-column without options are equivalent to always and never respectively."
      },
      {
        "argument": "--ahead-behind",
        "arguments": "--ahead-behind, --no-ahead-behind",
        "description": "Display or do not display detailed ahead/behind counts for the branch relative to its upstream branch.\nDefaults to true."
      },
      {
        "argument": "--no-ahead-behind",
        "arguments": "--ahead-behind, --no-ahead-behind",
        "description": "Display or do not display detailed ahead/behind counts for the branch relative to its upstream branch.\nDefaults to true."
      },
      {
        "argument": "--renames",
        "arguments": "--renames, --no-renames",
        "description": "Turn on/off rename detection regardless of user configuration.\nSee also git-diff(1) --no-renames."
      },
      {
        "argument": "--no-renames",
        "arguments": "--renames, --no-renames",
        "description": "Turn on/off rename detection regardless of user configuration.\nSee also git-diff(1) --no-renames."
      },
      {
        "argument": "--find-renames[=<n>]",
        "arguments": "-M, --find-renames[=<n>]",
        "description": "Turn on rename detection, optionally setting the similarity threshold.\nSee also git-diff(1) --find-renames."
      }
    ]
  },
  {
    "section": "notes",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-notes",
    "description": "Add or inspect object notes.\nA typical use of notes is to supplement a commit message without changing the commit itself.\nNotes can be shown by git log along with the original commit message.",
    "options": [
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "When adding notes to an object that already has notes, overwrite the existing notes (instead of aborting)."
      },
      {
        "argument": "--message=<msg>",
        "arguments": "-m <msg>, --message=<msg>",
        "description": "Use the given note message (instead of prompting).\nIf multiple -m options are given, their values are concatenated as separate paragraphs.\nLines starting with # and empty lines other than a single line between paragraphs will be stripped out."
      },
      {
        "argument": "--file=<file>",
        "arguments": "-F <file>, --file=<file>",
        "description": "Take the note message from the given file.\nUse - to read the note message from the standard input.\nLines starting with # and empty lines other than a single line between paragraphs will be stripped out."
      },
      {
        "argument": "--reuse-message=<object>",
        "arguments": "-C <object>, --reuse-message=<object>",
        "description": "Take the given blob object (for example, another note) as the note message.\n(Use git notes copy <object> instead to copy notes between objects.)"
      },
      {
        "argument": "--reedit-message=<object>",
        "arguments": "-c <object>, --reedit-message=<object>",
        "description": "Like -C, but with -c the editor is invoked, so that the user can further edit the note message."
      },
      {
        "argument": "--allow-empty",
        "arguments": "--allow-empty",
        "description": "Allow an empty note object to be stored.\nThe default behavior is to automatically remove empty notes."
      },
      {
        "method_name": "ref_notes",
        "argument": "--ref <ref>",
        "arguments": "--ref <ref>",
        "description": "Manipulate the notes tree in <ref>.\nThis overrides GIT_NOTES_REF and the \"core.notesRef\" configuration.\nThe ref specifies the full refname when it begins with refs/notes/;\nwhen it begins with notes/, refs/ and otherwise refs/notes/ is prefixed to form a full name of the ref."
      },
      {
        "argument": "--ignore-missing",
        "arguments": "--ignore-missing",
        "description": "Do not consider it an error to request removing notes from an object that does not have notes attached to it."
      },
      {
        "argument": "--stdin",
        "arguments": "--stdin",
        "description": "Also read the object names to remove notes from the standard input (there is no reason you cannot combine this with object names from the command line)."
      },
      {
        "argument": "--dry-run",
        "arguments": "-n, --dry-run",
        "description": "Do not remove anything; just report the object names whose notes would be removed."
      },
      {
        "argument": "--strategy=<strategy>",
        "arguments": "-s <strategy>, --strategy=<strategy>",
        "description": "When merging notes, resolve notes conflicts using the given strategy.\nThe following strategies are recognized: \"manual\" (default), \"ours\", \"theirs\", \"union\" and \"cat_sort_uniq\".\nThis option overrides the \"notes.mergeStrategy\" configuration setting.\nSee the \"NOTES MERGE STRATEGIES\" section below for more information on each notes merge strategy."
      },
      {
        "argument": "--commit",
        "arguments": "--commit",
        "description": "Finalize an in-progress git notes merge.\nUse this option when you have resolved the conflicts that git notes merge stored in .git/NOTES_MERGE_WORKTREE.\nThis amends the partial merge commit created by git notes merge (stored in .git/NOTES_MERGE_PARTIAL) by adding the notes in .git/NOTES_MERGE_WORKTREE.\nThe notes ref stored in the .git/NOTES_MERGE_REF symref is updated to the resulting commit."
      },
      {
        "argument": "--abort",
        "arguments": "--abort",
        "description": "Abort/reset an in-progress git notes merge, i.e.\na notes merge with conflicts.\nThis simply removes all files related to the notes merge."
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "When merging notes, operate quietly."
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "When merging notes, be more verbose.\nWhen pruning notes, report all object names whose notes are removed."
      }
    ]
  },
  {
    "section": "ls-files",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-ls-files",
    "description": "Show information about files in the index and the working tree.\nThis command merges the file listing in the index with the actual working directory list, and shows different combinations of the two.",
    "options": [
      {
        "argument": "--cached",
        "arguments": "-c, --cached",
        "description": "Show cached files in the output (default)"
      },
      {
        "argument": "--deleted",
        "arguments": "-d, --deleted",
        "description": "Show deleted files in the output"
      },
      {
        "argument": "--modified",
        "arguments": "-m, --modified",
        "description": "Show modified files in the output"
      },
      {
        "argument": "--others",
        "arguments": "-o, --others",
        "description": "Show other (i.e.\nuntracked) files in the output"
      },
      {
        "argument": "--ignored",
        "arguments": "-i, --ignored",
        "description": "Show only ignored files in the output.\nWhen showing files in the index, print only those matched by an exclude pattern.\nWhen showing \"other\" files, show only those matched by an exclude pattern.\nStandard ignore rules are not automatically activated, therefore at least one of the --exclude* options is required."
      },
      {
        "argument": "--stage",
        "arguments": "-s, --stage",
        "description": "Show staged contents' mode bits, object name and stage number in the output."
      },
      {
        "argument": "--directory",
        "arguments": "--directory",
        "description": "If a whole directory is classified as \"other\", show just its name (with a trailing slash) and not its whole contents."
      },
      {
        "argument": "--no-empty-directory",
        "arguments": "--no-empty-directory",
        "description": "Do not list empty directories.\nHas no effect without --directory."
      },
      {
        "argument": "--unmerged",
        "arguments": "-u, --unmerged",
        "description": "Show unmerged files in the output (forces --stage)"
      },
      {
        "argument": "--killed",
        "arguments": "-k, --killed",
        "description": "Show files on the filesystem that need to be removed due to file/directory conflicts for checkout-index to succeed."
      },
      {
        "argument": "-z",
        "arguments": "-z",
        "description": "\\0 line termination on output and do not quote filenames.\nSee OUTPUT below for more information."
      },
      {
        "argument": "--deduplicate",
        "arguments": "--deduplicate",
        "description": "When only filenames are shown, suppress duplicates that may come from having multiple stages during a merge,\nor giving --deleted and --modified option at the same time.\nWhen any of the -t, --unmerged, or --stage option is in use, this option has no effect."
      },
      {
        "argument": "--exclude=<pattern>",
        "arguments": "-x <pattern>, --exclude=<pattern>",
        "description": "Skip untracked files matching pattern.\nNote that pattern is a shell wildcard pattern.\nSee EXCLUDE PATTERNS below for more information."
      },
      {
        "argument": "--exclude-from=<file>",
        "arguments": "-X <file>, --exclude-from=<file>",
        "description": "Read exclude patterns from <file>; 1 per line."
      },
      {
        "argument": "--exclude-per-directory=<file>",
        "arguments": "--exclude-per-directory=<file>",
        "description": "Read additional exclude patterns that apply only to the directory and its subdirectories in <file>."
      },
      {
        "argument": "--exclude-standard",
        "arguments": "--exclude-standard",
        "description": "Add the standard Git exclusions: .git/info/exclude, .gitignore in each directory, and the user’s global exclusion file."
      },
      {
        "argument": "--error-unmatch",
        "arguments": "--error-unmatch",
        "description": "If any <file> does not appear in the index, treat this as an error (return 1)."
      },
      {
        "argument": "--with-tree=<tree-ish>",
        "arguments": "--with-tree=<tree-ish>",
        "description": "When using --error-unmatch to expand the user supplied <file> (i.e.\npath pattern)\narguments to paths, pretend that paths which were removed in the index since the named <tree-ish> are still present.\nUsing this option with -s or -u options does not make any sense."
      },
      {
        "argument": "-t",
        "arguments": "-t",
        "description": "This feature is semi-deprecated.\nFor scripting purpose, git-status(1) --porcelain and git-diff-files(1) --name-status are almost always superior alternatives,\nand users should look at git-status(1) --short or git-diff(1) --name-status for more user-friendly alternatives."
      },
      {
        "argument": "-v",
        "arguments": "-v",
        "description": "Similar to -t, but use lowercase letters for files that are marked as assume unchanged (see git-update-index(1))."
      },
      {
        "argument": "-f",
        "arguments": "-f",
        "description": "Similar to -t, but use lowercase letters for files that are marked as fsmonitor valid (see git-update-index(1))."
      },
      {
        "argument": "--full-name",
        "arguments": "--full-name",
        "description": "When run from a subdirectory, the command usually outputs paths relative to the current directory.\nThis option forces paths to be output relative to the project top directory."
      },
      {
        "argument": "--recurse-submodules",
        "arguments": "--recurse-submodules",
        "description": "Recursively calls ls-files on each active submodule in the repository.\nCurrently there is only support for the --cached and --stage modes."
      },
      {
        "argument": "--abbrev[=<n>]",
        "arguments": "--abbrev[=<n>]",
        "description": "Instead of showing the full 40-byte hexadecimal object lines,\nshow the shortest prefix that is at least <n> hexdigits long that uniquely refers the object.\nNon default number of digits can be specified with --abbrev=<n>."
      },
      {
        "argument": "--debug",
        "arguments": "--debug",
        "description": "After each line that describes a file, add more data about its cache entry.\nThis is intended to show as much information as possible for manual inspection; the exact format may change at any time."
      },
      {
        "argument": "--eol",
        "arguments": "--eol",
        "description": "Show <eolinfo> and <eolattr> of files.\n<eolinfo> is the file content identification used by Git when the \"text\" attribute is \"auto\"\n(or not set and core.autocrlf is not false).\n<eolinfo> is either \"-text\", \"none\", \"lf\", \"crlf\", \"mixed\" or \"\".\\n\"\" means the file is not a regular file, it is not in the index or not accessible in the working tree.\n<eolattr> is the attribute that is used when checking out or committing, it is either \"\", \"-text\", \"text\", \"text=auto\", \"text eol=lf\", \"text eol=crlf\".\nSince Git 2.10 \"text=auto eol=lf\" and \"text=auto eol=crlf\" are supported.\nBoth the <eolinfo> in the index (\"i/<eolinfo>\") and in the working tree (\"w/<eolinfo>\") are shown for regular files, followed by the (\"attr/<eolattr>\")."
      },
      {
        "argument": "--sparse",
        "arguments": "--sparse",
        "description": "If the index is sparse, show the sparse directories without expanding to the contained files.\nSparse directories will be shown with a trailing slash, such as \"x/\" for a sparse directory •\"x•\"."
      },
      {
        "argument": "--format=<format>",
        "arguments": "--format=<format>",
        "description": "A string that interpolates %(fieldname) from the result being shown.\nIt also interpolates %% to %, and %xx where xx are hex digits interpolates to character with hex code xx; for example %00 interpolates to \\0 (NUL), %09 to \\t (TAB) and %0a to \\n (LF).\n--format cannot be combined with -s, -o, -k, -t, --resolve-undo and --eol."
      },
      {
        "method_name": "hyphen_hyphen",
        "argument": "--",
        "arguments": "--",
        "description": "Do not interpret any more arguments as options."
      },
      {
        "method_name": "file",
        "argument": "<file>",
        "arguments": "<file>",
        "description": "Files to show.\nIf no files are given all files which match the other specified criteria are shown."
      }
    ]
  },
  {
    "section": "branch",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-branch",
    "description": "List, create, or delete branches.",
    "options": [
      {
        "argument": "--abbrev[=<n>]",
        "arguments": "--abbrev[=<n>]",
        "description": "use <n> digits to display SHA-1s"
      },
      {
        "argument": "--all",
        "arguments": "-a, --all",
        "description": "All list both remote-tracking and local branches"
      },
      {
        "argument": "<branch_name>",
        "arguments": "<branch_name>",
        "description": "specify a valid branch name"
      },
      {
        "argument": "--color[=<when>]",
        "arguments": "--color[=<when>]",
        "description": "use colored output"
      },
      {
        "argument": "--column[=<style>]",
        "arguments": "--column[=<style>]",
        "description": "list branches in columns"
      },
      {
        "argument": "--contains <commit>",
        "arguments": "--contains <commit>",
        "description": "print only branches that contain the commit"
      },
      {
        "argument": "--no-contains <commit>",
        "arguments": "--no-contains <commit>",
        "description": "print only branches that don't contain the commit"
      },
      {
        "argument": "--create-reflog",
        "arguments": "-l, --create-reflog",
        "description": "create the branch's reflog"
      },
      {
        "argument": "--delete",
        "arguments": "-d, --delete",
        "description": "delete fully merged branch"
      },
      {
        "method_name": "delete-force",
        "argument": "-D",
        "arguments": "-D",
        "description": "delete branch (even if not merged)"
      },
      {
        "argument": "--edit-description",
        "arguments": "--edit-description",
        "description": "edit the description for the branch"
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "force creation, move/rename, deletion"
      },
      {
        "argument": "--format <format>",
        "arguments": "--format <format>",
        "description": "format to use for the output"
      },
      {
        "argument": "--ignore-case",
        "arguments": "-i, --ignore-case",
        "description": "sorting and filtering are case insensitive"
      },
      {
        "argument": "--list",
        "arguments": "--list",
        "description": "list branch names"
      },
      {
        "argument": "--points-at <object>",
        "arguments": "--points-at <object>",
        "description": "print only branches of the object"
      },
      {
        "argument": "--merged <commit>",
        "arguments": "--merged <commit>",
        "description": "print only branches that are merged"
      },
      {
        "argument": "--no-merged <commit>",
        "arguments": "--no-merged <commit>",
        "description": "print only branches that are not merged"
      },
      {
        "method_name": "move-branch",
        "argument": "--move",
        "arguments": "-m, --move",
        "description": "move/rename a branch and its reflog"
      },
      {
        "method_name": "move-force",
        "argument": "-M",
        "arguments": "-M",
        "description": "move/rename a branch, even if target exists"
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "suppress informational messages"
      },
      {
        "argument": "--remotes",
        "arguments": "-r, --remotes",
        "description": "act on remote-tracking branches"
      },
      {
        "argument": "--show-current",
        "arguments": "--show-current",
        "description": "print the name of the current branch.\nIn detached HEAD state, nothing is printed"
      },
      {
        "argument": "--unset-upstream [branchname]",
        "arguments": "--unset-upstream",
        "description": "SetUpstream change upstream info"
      },
      {
        "argument": "--set-upstream-to <upstream>",
        "arguments": "-u, --set-upstream-to <upstream>",
        "description": "change the upstream info to upstream"
      },
      {
        "argument": "--sort <key>",
        "arguments": "--sort <key>",
        "description": "field name to sort on"
      },
      {
        "argument": "--track",
        "arguments": "-t, --track",
        "description": "set up tracking mode (see git-pull(1)"
      },
      {
        "argument": "--verbose",
        "arguments": "-v, --verbose",
        "description": "show hash and subject, give twice for upstream branch"
      }
    ]
  },
  {
    "section": "clean",
    "is_command": true,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git-clean",
    "description": "Remove untracked files from the working tree.\nCleans the working tree by recursively removing files that are not under version control, starting from the current directory.",
    "options": [
      {
        "method_name": "recurse-directories",
        "argument": "-d",
        "arguments": "-d",
        "description": "Normally, when no <pathspec> is specified, git clean will not recurse into untracked directories to avoid removing too much.\nSpecify -d to have it recurse into such directories as well.\nIf a <pathspec> is specified, -d is irrelevant; all untracked files matching the specified paths (with exceptions for nested git directories mentioned under --force) will be removed"
      },
      {
        "argument": "--force",
        "arguments": "-f, --force",
        "description": "If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to delete files or directories unless given -f.\nGit will refuse to modify untracked nested git repositories (directories with a .git subdirectory) unless a second -f is given"
      },
      {
        "argument": "--interactive",
        "arguments": "-i, --interactive",
        "description": "Show what would be done and clean files interactively.\nSee “Interactive mode” for details.\nConfiguration variable clean.requireForce is ignored, as this mode gives its own safety protection by going interactive"
      },
      {
        "argument": "--dry-run",
        "arguments": "-n, --dry-run",
        "description": "Don’t actually remove anything, just show what would be done.\nConfiguration variable clean.requireForce is ignored, as nothing will be deleted anyway"
      },
      {
        "argument": "--quiet",
        "arguments": "-q, --quiet",
        "description": "Be quiet, only report errors, but not the files that are successfully removed"
      },
      {
        "argument": "--exclude=<pattern>",
        "arguments": "-e=<pattern>, --exclude=<pattern>",
        "description": "Use the given exclude pattern in addition to the standard ignore rules."
      },
      {
        "method_name": "no-gitignore",
        "argument": "-x",
        "arguments": "-x",
        "description": "Don’t use the standard ignore rules, but still use the ignore rules given with -e options from the command line.\nThis allows removing all untracked files, including build products.\nThis can be used (possibly in conjunction with git restore or git reset) to create a pristine working directory to test a clean build"
      },
      {
        "method_name": "gitignore",
        "argument": "-X",
        "arguments": "-X",
        "description": "Remove only files ignored by Git.\nThis may be useful to rebuild everything from scratch, but keep manually created files"
      },
      {
        "method_name": "hyphen_hyphen",
        "argument": "--",
        "arguments": "--",
        "description": "Should appear just before any pathspec option"
      },
      {
        "method_name": "pathspec",
        "argument": "<pathspec>",
        "arguments": "<pathspec>",
        "description": "If any optional <pathspec>... arguments are given,\nonly those paths that match the pathspec are affected"
      }
    ]
  },
  {
    "section": "generic",
    "is_command": false,
    "enabled": true,
    "doc-url": "https://git-scm.com/docs/git#_git_commandsc",
    "description": "These are generic options not related with any specific git commands. Some of them can go with other commands and some of them must be isolated without any command.",
    "options": [
      {
        "argument": "--version",
        "arguments": "--version, -v",
        "description": "Prints the Git suite version that the git program came from."
      },
      {
        "argument": "--help",
        "arguments": "--help, -h",
        "description": "Prints the synopsis and a list of the most commonly used commands."
      },
      {
        "method_name": "working_path",
        "argument": "-C <path>",
        "arguments": "-C <path>",
        "description": "Run as if git was started in <path> instead of the current working directory."
      },
      {
        "argument": "--exec-path[=<path>]",
        "arguments": "--exec-path[=<path>]",
        "description": "Path to wherever your core Git programs are installed.\nThis can also be controlled by setting the GIT_EXEC_PATH environment variable.\nIf no path is given, git will print the current setting and then exit."
      },
      {
        "argument": "--html-path",
        "arguments": "--html-path",
        "description": "Print the path, without trailing slash, where Git’s HTML documentation is installed and exit"
      },
      {
        "argument": "--man-path",
        "arguments": "--man-path",
        "description": "Print the manpath (see man(1)) for the man pages for this version of Git and exit."
      },
      {
        "argument": "--info-path",
        "arguments": "--info-path",
        "description": "Print the path where the Info files documenting this version of Git are installed and exit"
      },
      {
        "argument": "--paginate",
        "arguments": "--paginate, -p",
        "description": "Pipe all output into less (or if set, $PAGER) if standard output is a terminal. This overrides the pager.<cmd> configuration options"
      },
      {
        "argument": "--no-pager",
        "arguments": "--no-pager, -P",
        "description": "Do not pipe Git output into a pager."
      },
      {
        "argument": "--git-dir=<path>",
        "arguments": "--git-dir=<path>",
        "description": "Set the path to the repository (\".git\" directory).\nThis can also be controlled by setting the GIT_DIR environment variable.\nIt can be an absolute path or relative path to current working directory."
      },
      {
        "argument": "--work-tree=<path>",
        "arguments": "--work-tree=<path>",
        "description": "Set the path to the working tree.\nIt can be an absolute path or a path relative to the current working directory.\nThis can also be controlled by setting the GIT_WORK_TREE environment variable and the core.worktree configuration variable"
      },
      {
        "argument": "--namespace=<path>",
        "arguments": "--namespace=<path>",
        "description": "Set the Git namespace.\nSee gitnamespaces[7] for more details.\nEquivalent to setting the GIT_NAMESPACE environment variable."
      },
      {
        "argument": "--bare",
        "arguments": "--bare",
        "description": "Treat the repository as a bare repository.\nIf GIT_DIR environment is not set, it is set to the current working directory."
      },
      {
        "argument": "--no-replace-objects",
        "arguments": "--no-replace-objects",
        "description": "Do not use replacement refs to replace Git objects.\nThis is equivalent to exporting the GIT_NO_REPLACE_OBJECTS environment variable with any value."
      },
      {
        "argument": "--no-lazy-fetch",
        "arguments": "--no-lazy-fetch",
        "description": "Do not fetch missing objects from the promisor remote on demand.\nUseful together with git cat-file -e <object> to see if the object is locally available.\nThis is equivalent to setting the GIT_NO_LAZY_FETCH environment variable to 1"
      },
      {
        "argument": "--no-optional-locks",
        "arguments": "--no-optional-locks",
        "description": "Do not perform optional operations that require locks.\nThis is equivalent to setting the GIT_OPTIONAL_LOCKS to 0."
      },
      {
        "argument": "--no-advice",
        "arguments": "--no-advice",
        "description": "Disable all advice hints from being printed"
      },
      {
        "argument": "--literal-pathspecs ",
        "arguments": "--literal-pathspecs ",
        "description": "Treat pathspecs literally (i.e. no globbing, no pathspec magic).\nThis is equivalent to setting the GIT_LITERAL_PATHSPECS environment variable to 1."
      },
      {
        "argument": "--glob-pathspecs",
        "arguments": "--glob-pathspecs",
        "description": "Add \"glob\" magic to all pathspec.\nThis is equivalent to setting the GIT_GLOB_PATHSPECS environment variable to 1."
      },
      {
        "argument": "--noglob-pathspecs",
        "arguments": "--noglob-pathspecs",
        "description": "Add \"literal\" magic to all pathspec.\nThis is equivalent to setting the GIT_NOGLOB_PATHSPECS environment variable to 1."
      },
      {
        "argument": "--icase-pathspecs",
        "arguments": "--icase-pathspecs",
        "description": "Add \"icase\" magic to all pathspec.\nThis is equivalent to setting the GIT_ICASE_PATHSPECS environment variable to 1."
      },
      {
        "argument": "--attr-source=<tree-ish>",
        "arguments": "--attr-source=<tree-ish>",
        "description": "Read gitattributes from <tree-ish> instead of the worktree. See gitattributes[5]. This is equivalent to setting the GIT_ATTR_SOURCE environment variable."
      }
    ]
  },
  {
    "section": "",
    "is_command": false,
    "enabled": false,
    "description": "",
    "options": [
      {
        "method_name": "optional",
        "argument": "",
        "arguments": "",
        "description": ""
      }
    ]
  }
]