forked from Imangazaliev/git-tips
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tips.json
695 lines (695 loc) · 28.5 KB
/
tips.json
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
[
{
"title": "Branch",
"items": [
{
"title":"Создать новую ветку и переключиться на нее",
"tip":"git checkout -b <branch-name>",
"alternatives":[
"git branch <branch-name> && git checkout <branch-name>"
]
},
{
"title":"Быстрое переключение на предыдущую ветку",
"tip":"git checkout -"
},
{
"title":"Список локальных и удаленных веток",
"tip":"git branch -a"
},
{
"title":"Список веток в удаленном репозитории",
"tip":"git branch -r"
},
{
"title":"Показать все ветки (в том числе и удаленные ветки), а так же последний коммит в них",
"tip":"git branch -vv"
},
{
"title":"Переименовать ветку",
"tip":"git branch -m <new-branch-name>",
"alternatives":[
"git branch -m [<old-branch-name>] <new-branch-name>"
]
},
{
"title":"Удалить локальную ветку",
"tip":"git branch -d <local_branchname>"
},
{
"title":"Удалить ветку в удаленном репозитории",
"tip":"git push origin --delete <remote_branchname>",
"alternatives":[
"git push origin :<remote_branchname>"
]
},
{
"title":"Показать список веток, которые уже слиты с веткой master",
"tip":"git branch --merged master"
},
{
"title":"Удалить ветки, которые уже слиты с master",
"tip":"git branch --merged master | grep -v '^\\*' | xargs -n 1 git branch -d",
"alternatives":[
"git branch --merged master | grep -v '^\\*\\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out"
]
},
{
"title":"Найти ветки, которые содержат коммит с указанным хешем",
"tip":"git branch -a --contains <commit-ish>",
"alternatives":[
"git branch --contains <commit-ish>"
]
},
{
"title":"Track upstream branch",
"tip":"git branch -u origin/mybranch"
}
]
},
{
"title": "Commit",
"items": [
{
"title":"Изменить сообщение последнего коммита",
"tip":"git commit --amend"
},
{
"title":"Изменить предыдущий коммит без изменения сообщения к коммиту",
"tip":"git commit --amend --no-edit"
},
{
"title":"Исправить имя автора последнего коммита",
"tip":"git commit --amend --no-edit --author='Author Name <[email protected]>'"
},
{
"title":"Reset author, after author has been changed in the global config",
"tip":"git commit --amend --reset-author --no-edit"
},
{
"title":"Создать коммит только с указанными файлами",
"tip":"git commit --only <file_path>"
},
{
"title":"Сделать коммит, обойдя хуки pre-commit и commit-msg",
"tip":"git commit --no-verify"
},
{
"title":"Отметить коммит как исправление к указанному коммиту",
"tip":"git commit --fixup <SHA-1>"
}
]
},
{
"title": "Config",
"items": [
{
"title":"Показать конфиг и все псевдонимы (alias)",
"tip":"git config --list"
},
{
"title":"Изменить локальный/глобальный конфиг git",
"tip":"git config [--global] --edit"
},
{
"title":"Изменить текстовый редактор",
"tip":"git config --global core.editor '$EDITOR'"
},
{
"title":"Игнорировать изменения прав доступа на файлы при коммите",
"tip":"git config core.fileMode false"
},
{
"title":"Сделать git чувствительным к регистру",
"tip":"git config --global core.ignorecase false"
},
{
"title":"Включить автоматическое исправление опечаток",
"tip":"git config --global help.autocorrect 1"
},
{
"title":"Отключить цветной вывод Git",
"tip":"git config --global color.ui false"
},
{
"title":"Specific color settings",
"tip":"git config --global <specific command e.g branch, diff> <true, false or always>"
},
{
"title":"Удалить запись из глобального конфига",
"tip":"git config --global --unset <entry-name>"
},
{
"title":"Reuse recorded resolution, record and reuse previous conflicts resolutions",
"tip":"git config --global rerere.enabled 1"
},
{
"title":"Всегда выполнять перемещение вместо слияния при получении изменений из удаленного репозитория",
"tip":"git config --global pull.rebase true",
"alternatives":[
"#git < 1.7.9\ngit config --global branch.autosetuprebase always"
]
},
{
"title":"Псевдонимы (alias) для команд Git",
"tip":"git config --global alias.<handle> <command> \ngit config --global alias.st status"
}
]
},
{
"title": "Diff",
"items": [
{
"title":"Показать изменения с момента последнего коммита",
"tip":"git diff"
},
{
"title":"Показать все изменения (для файлов которых нет в индексе и которые уже там)",
"tip":"git diff HEAD"
},
{
"title":"Изменения в файлах, которые находятся в индексе",
"tip":"git diff --cached",
"alternatives":[
"git diff --staged"
]
},
{
"title":"Показывать изменения в одну строку",
"tip":"git diff --word-diff"
},
{
"title":"Показать список конфликтующих файлов",
"tip":"git diff --name-only --diff-filter=U"
},
{
"title":"Открыть все конфликтующие файлы в редакторе",
"tip":"git diff --name-only | uniq | xargs $EDITOR"
},
{
"title":"Список всех файлов, которые были изменены в коммите",
"tip":"git diff-tree --no-commit-id --name-only -r <commit-ish>"
}
]
},
{
"title": "Log",
"items": [
{
"title":"Показать логи за определенный период (от-до)",
"tip":"git log --since='FEB 1 2017' --until='FEB 14 2017'"
},
{
"title":"Показать историю коммитов, сгрупировав их по имени автора",
"tip":"git shortlog"
},
{
"title":"Показать историю коммитов, исключив коммиты указанного автора",
"tip":"git log --perl-regexp --author='^((?!excluded-author-regex).*)$'"
},
{
"title":"Показать коммиты и изменения в них для определенного файла (даже если он был переименован)",
"tip":"git log --follow -p -- <file_path>"
},
{
"title":"List only the root and merge commits",
"tip":"git log --first-parent"
},
{
"title":"Показать незапушенные коммиты",
"tip":"git log --branches --not --remotes",
"alternatives":[
"git log @{u}..",
"git cherry -v"
]
},
{
"title":"Показать все коммиты с момента отделения от ветки master",
"tip":"git log --no-merges --stat --reverse master.."
},
{
"title":"Коммиты в ветке Branch1, которых нет в Branch2",
"tip":"git log Branch1 ^Branch2"
},
{
"title":"Показать GPG-сигнатуру в истории коммитов",
"tip":"git log --show-signature"
},
{
"title":"Показать количество строк, которое добавил/удалил пользователь",
"tip":"git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s removed lines: %s total lines: %s\n\", add, subs, loc }' -",
"alternatives":[
"git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\n\", add, subs, loc }' - # on Mac OSX"
]
},
{
"title":"Search Commit log across all branches for given text",
"tip":"git log --all --grep='<given-text>'"
},
{
"title":"Показать все заметки (git notes)",
"tip":"git log --show-notes='*'"
},
{
"title":"Показать дерево тегов (версий)",
"tip":"git log --pretty=oneline --graph --decorate --all",
"alternatives":[
"gitk --all"
]
},
{
"title":"Get first commit in a branch (from master)",
"tip":"git log master..<branch-name> --oneline | tail -1"
}
]
},
{
"title": "Stash",
"items": [
{
"title":"Спрятать текущие изменения для отслеживаемых файлов",
"tip":"git stash",
"alternatives":[
"git stash save"
]
},
{
"title":"Спрятать текущие изменения, включая неотслеживаемые файлы",
"tip":"git stash save -u",
"alternatives":[
"git stash save --include-untracked"
]
},
{
"title":"Показать список спрятанных изменений",
"tip":"git stash list"
},
{
"title":"Применить последние спрятанные изменения и удалить их из стека",
"tip":"git stash pop",
"alternatives":[
"git stash apply stash@{0} && git stash drop stash@{0}"
]
},
{
"title":"Применить последние спрятанные изменения без удаления их из стека",
"tip":"git stash apply <stash@{n}>"
},
{
"title":"Очистить stash",
"tip":"git stash clear",
"alternatives":[
"git stash drop <stash@{n}>"
]
}
]
},
{
"title": "Tags",
"items": [
{
"title":"Удалить тег в локальном репозитории",
"tip":"git tag -d <tag-name>"
},
{
"title":"Удалить тег в удаленном репозитории",
"tip":"git push origin :refs/tags/<tag-name>"
}
]
},
{
"title": "Разное",
"items": [
{
"title":"Everyday Git in twenty commands or so",
"tip":"git help everyday"
},
{
"title":"Show helpful guides that come with Git",
"tip":"git help -g"
},
{
"title":"Клонировать отдельную ветку",
"tip":"git clone -b <branch-name> --single-branch https://github.com/user/repo.git"
},
{
"title":"Клонировать репозиторий с указаным количеством коммитов",
"tip":"git clone https://github.com/user/repo.git --depth 1"
},
{
"title":"Импортировать пакет в репозиторий",
"tip":"git clone repo.bundle <repo-dir> -b <branch-name>"
},
{
"title":"Alias: git undo",
"tip":"git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'"
},
{
"title":"Получить данные из удаленного репозитория и сбросить состояние текущей ветки к ним",
"tip":"git fetch --all && git reset --hard origin/master"
},
{
"title":"Prunes references to remote branches that have been deleted in the remote",
"tip":"git fetch -p",
"alternatives":[
"git remote prune origin"
]
},
{
"title":"Загрузить пулл-реквест в текущую ветку по ID",
"tip":"git fetch origin pull/<id>/head:<branch-name>",
"alternatives":[
"git pull origin pull/<id>/head:<branch-name>"
]
},
{
"title":"Specific fetch reference",
"tip":"git fetch origin master:refs/remotes/origin/mymaster"
},
{
"title":"List of all files till a commit",
"tip":"git ls-tree --name-only -r <commit-ish>"
},
{
"title":"Git reset first commit",
"tip":"git update-ref -d HEAD"
},
{
"title":"Показать самый последний тег на текущей ветке",
"tip":"git describe --tags --abbrev=0"
},
{
"title":"Revert: отменить коммит с помощью нового коммита",
"tip":"git revert <commit-ish>"
},
{
"title":"Revert: отменить слияние (merge) с помощью нового коммита",
"tip":"git revert -m 1 <commit-ish>"
},
{
"title":"Reset: Discard commits, advised for private branch",
"tip":"git reset <commit-ish>"
},
{
"title":"Удалить файл из индекса",
"tip":"git reset HEAD <file-name>"
},
{
"title":"Показать историю коммитов только для текущей ветки",
"tip":"git cherry -v master"
},
{
"title":"Показать список удаленных репозиториев",
"tip":"git remote",
"alternatives":[
"git remote show"
]
},
{
"title":"Изменить URL удаленного репозитория",
"tip":"git remote set-url origin <URL>"
},
{
"title":"List references in a remote repository",
"tip":"git ls-remote git://git.kernel.org/pub/scm/git/git.git"
},
{
"title":"Добавить удаленный репозиторий",
"tip":"git remote add <remote-nickname> <remote-url>"
},
{
"title":"Добавить в индекс часть файла",
"tip":"git add -p"
},
{
"title":"Автокомплит Git-команд в bash",
"tip":"curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc"
},
{
"title":"Изменения за указанный промежуток времени",
"tip":"git log --no-merges --raw --since='2 weeks ago'",
"alternatives":[
"git whatchanged --since='2 weeks ago'"
]
},
{
"title":"Перенести коммиты из одной ветки в другую с помощью cherry-pick",
"tip":"git checkout <branch-name> && git cherry-pick <commit-ish>"
},
{
"title":"Извлечь отдельный файл из stash",
"tip":"git checkout <stash@{n}> -- <file_path>",
"alternatives":[
"git checkout stash@{0} -- <file_path>"
]
},
{
"title":"Undo local changes with the last content in head",
"tip":"git checkout -- <file_name>"
},
{
"title":"Создать новую ветку без родительской ветки",
"tip":"git checkout --orphan <branch_name>"
},
{
"title":"Показать все ветки, не слитые в master",
"tip":"git checkout master && git branch --no-merged"
},
{
"title":"Показать все отслеживаемы файлы",
"tip":"git ls-files -t"
},
{
"title":"Показать все неотслеживаемые файлы",
"tip":"git ls-files --others"
},
{
"title":"Показать все игнорируемые файлы",
"tip":"git ls-files --others -i --exclude-standard"
},
{
"title":"Create new working tree from a repository (git 2.5)",
"tip":"git worktree add -b <branch-name> <path> <start-point>"
},
{
"title":"Create new working tree from HEAD state",
"tip":"git worktree add --detach <path> HEAD"
},
{
"title":"Не отслеживать файлы (без удаления)",
"tip":"git rm --cached <file_path>",
"alternatives":[
"git rm --cached -r <directory_path>"
]
},
{
"title":"Before deleting untracked files/directory, do a dry run to get the list of these files/directories",
"tip":"git clean -n"
},
{
"title":"Принудительно удалить неотслеживаемые файлы",
"tip":"git clean -f"
},
{
"title":"Принудительно удалить неотслеживаемую директорию",
"tip":"git clean -f -d",
"alternatives":[
"git clean -df"
]
},
{
"title":"Обновить все субмодули",
"tip":"git submodule foreach git pull",
"alternatives":[
"git submodule update --init --recursive",
"git submodule update --remote"
]
},
{
"title":"Показать коммиты текущей ветки, которые будут слиты в мастер",
"tip":"git cherry -v master",
"alternatives":[
"git cherry -v master <branch-to-be-merged>"
]
},
{
"title":"Переместить ветку 'feature' на 'master' и слить ее в мастер",
"tip":"git rebase master feature && git checkout master && git merge -"
},
{
"title":"Архивировать ветку master",
"tip":"git archive master --format=zip --output=master.zip"
},
{
"title":"Retrieve the commit hash of the initial revision",
"tip":" git rev-list --reverse HEAD | head -1",
"alternatives":[
"git rev-list --max-parents=0 HEAD",
"git log --pretty=oneline | tail -1 | cut -c 1-40",
"git log --pretty=oneline --reverse | head -1 | cut -c 1-40"
]
},
{
"title":"Deploying git tracked subfolder to gh-pages",
"tip":"git subtree push --prefix subfolder_name origin gh-pages",
"alternatives":"git subtree push --prefix subfolder_name origin branch_name"
},
{
"title":"Adding a project to repo using subtree",
"tip":"git subtree add --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git master"
},
{
"title":"Get latest changes in your repo for a linked project using subtree",
"tip":"git subtree pull --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git master"
},
{
"title":"Эспортировать ветку в файл (создать пакет)",
"tip":"git bundle create <file> <branch-name>"
},
{
"title":"Показать название текущей ветки",
"tip":"git rev-parse --abbrev-ref HEAD"
},
{
"title":"Ignore one file on commit (e.g. Changelog)",
"tip":"git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog"
},
{
"title":"Спрятать изменения перед выполнением перемещения",
"tip":"git rebase --autostash"
},
{
"title":"Show changes using common diff tools",
"tip":"git difftool -t <commit1> <commit2> <path>"
},
{
"title":"Don’t consider changes for tracked file",
"tip":"git update-index --assume-unchanged <file_name>"
},
{
"title":"Undo assume-unchanged",
"tip":"git update-index --no-assume-unchanged <file_name>"
},
{
"title":"Удалить все файлы, которые находятся в `.gitignore`",
"tip":"git clean -X -f"
},
{
"title":"Восстановить удаленный файл",
"tip":"git checkout <deleting_commit>^ -- <file_path>"
},
{
"title":"Restore file to a specific commit-hash",
"tip":"git checkout <commit-ish> -- <file_path>"
},
{
"title":"Check if the change was a part of a release",
"tip":"git name-rev --name-only <SHA-1>"
},
{
"title":"Dry run (any command that supports dry-run flag should do)",
"tip":"git clean -fd --dry-run"
},
{
"title":"Squash fixup commits normal commits",
"tip":"git rebase -i --autosquash"
},
{
"title":"Интерактивное добавление файлов в индекс",
"tip":"git add -i"
},
{
"title":"Показать список игнорируемых файлов",
"tip":"git check-ignore *"
},
{
"title":"Статус игнорируемых файлов",
"tip":"git status --ignored"
},
{
"title":"Count unpacked number of objects and their disk consumption",
"tip":"git count-objects --human-readable"
},
{
"title":"Prune all unreachable objects from the object database",
"tip":"git gc --prune=now --aggressive"
},
{
"title":"Instantly browse your working repository in gitweb",
"tip":"git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]"
},
{
"title":"Получить файл из другой ветки",
"tip":"git show <branch_name>:<file_name>"
},
{
"title":"Изменить коммиты в интерактивном режиме",
"tip":"git rebase --interactive HEAD~2"
},
{
"title":"Поиск коммита с багом при помощи бинарного поиска",
"tip":"git bisect start # Search start \ngit bisect bad # Set point to bad commit \ngit bisect good v2.6.13-rc2 # Set point to good commit|tag \ngit bisect bad # Say current state is bad \ngit bisect good # Say current state is good \ngit bisect reset # Finish search \n"
},
{
"title":"Показать все локальные ветки, отсортировав их по дате изменения",
"tip":"git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/"
},
{
"title":"Find lines matching the pattern (regex or string) in tracked files",
"tip":"git grep --heading --line-number 'foo bar'"
},
{
"title":"Отправить коммиты в удаленный репозиторий, перезаписав историю (force push)",
"tip":"git push -f <remote-name> <branch-name>"
},
{
"title":"Forced push but still ensure you don't overwrite other's work",
"tip":"git push --force-with-lease <remote-name> <branch-name>"
},
{
"title":"Количество коммитов в ветке",
"tip":"git rev-list --count <branch-name>"
},
{
"title":"Добавить заметку",
"tip":"git notes add -m 'Note on the previous commit....'"
},
{
"title":"Apply commit from another repository",
"tip":"git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -k"
},
{
"title":"Найти общего предка двух веток",
"tip":"diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1"
},
{
"title":"Показывает автора, время и хеш-коммита последнего изменения для каждой строки файла",
"tip":"git blame <file-name>"
},
{
"title":"Показывает автора, время и хеш-коммита последнего изменения для указанного диапазона строк",
"tip":"git blame -L <start>,<end>"
},
{
"title":"Show a Git logical variable",
"tip":"git var -l | <variable>"
},
{
"title":"Preformatted patch file",
"tip":"git format-patch -M upstream..topic"
},
{
"title":"Показать название репозитория",
"tip":"git rev-parse --show-toplevel"
},
{
"title":"Generates a summary of pending changes",
"tip":"git request-pull v1.0 https://git.ko.xz/project master:for-linus"
},
{
"title":"Сделать резервную копию неотслеживаемых файлов",
"tip":"git ls-files --others -i --exclude-standard | xargs zip untracked.zip"
}
]
}
]