├── .gitignore ├── .doxie.render.toc.js ├── .doxie.render.js ├── LICENSE ├── package.json ├── CONTRIBUTING.md ├── tips.json └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | -------------------------------------------------------------------------------- /.doxie.render.toc.js: -------------------------------------------------------------------------------- 1 | slugify = function(text) { 2 | var text = text.replace(/[a-z]+/gi, function (str) { 3 | return str.toLowerCase(); 4 | }); 5 | 6 | return text.toString() 7 | .replace(/\s+/g, '-') // Replace spaces with - 8 | .replace(/[^\wа-я\-]+/gi, '') // Remove all non-word chars 9 | .replace(/\-\-+/g, '-') // Replace multiple - with single - 10 | .replace(/^-+/, '') // Trim - from start of text 11 | .replace(/-+$/, ''); // Trim - from end of text 12 | } 13 | 14 | var render = function(data) { 15 | var data = data.data; 16 | 17 | var output = `### ${data.title}\n\n`; 18 | 19 | data.items.map(function (item) { 20 | output += '- [' + item.title + '](#' + slugify(item.title) + ')\n'; 21 | }); 22 | 23 | return output + '\n'; 24 | }; 25 | 26 | module.exports = render; 27 | -------------------------------------------------------------------------------- /.doxie.render.js: -------------------------------------------------------------------------------- 1 | function escapeStr(str) { 2 | return str 3 | .replace(/\"/g, '\\"') 4 | .replace(/\n/g, '\\n'); 5 | } 6 | 7 | var renderItem = function(data) { 8 | var lines = [ 9 | '### ' + data.title, 10 | ]; 11 | 12 | if (data.description !== undefined) { 13 | lines.push(data.description); 14 | } 15 | 16 | lines = lines.concat(['```sh', 17 | data.tip, 18 | '```\n', 19 | ]); 20 | 21 | if (Array.isArray(data.alternatives)) { 22 | lines.push('__Alternatives:__'); 23 | 24 | data.alternatives.map(function(alternative){ 25 | lines = lines.concat(['```sh', alternative, '```\n']) 26 | }); 27 | } 28 | 29 | return lines.join('\n'); 30 | }; 31 | 32 | function render(data){ 33 | var data = data.data; 34 | 35 | var lines = [ 36 | `\n## ${data.title}\n`, 37 | ]; 38 | 39 | lines = lines.concat(data.items.map(renderItem)); 40 | 41 | return lines.join('\n'); 42 | } 43 | 44 | module.exports = render; 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Muhammad Imangazaliev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tips", 3 | "version": "1.0.0", 4 | "description": "Collection of git tips", 5 | "main": "index.js", 6 | "private": "true", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1", 9 | "precommit": "npm run generate && git add README.md", 10 | "update-readme": "echo 'Updating the readme…'; doxie --render < ./tips.json --inject into README.md && echo '…done!'", 11 | "update-toc": "echo 'Updating the table of contents…'; doxie --render .doxie.render.toc.js < ./tips.json --append '\n' --inject into README.md as toc && echo '…done!'", 12 | "generate": "npm run update-readme; npm run update-toc" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/Imangazaliev/git-tips" 17 | }, 18 | "keywords": [ 19 | "npm", 20 | "tips" 21 | ], 22 | "contributors": [ 23 | "hemanth" 24 | ], 25 | "license": "MIT", 26 | "bugs": { 27 | "url": "https://github.com/Imangazaliev/git-tips/issues" 28 | }, 29 | "homepage": "https://github.com/Imangazaliev/git-tips", 30 | "devDependencies": { 31 | "doxie": "^0.2.2", 32 | "doxie.append": "^0.1.0", 33 | "doxie.inject": "^0.1.1", 34 | "doxie.output": "^0.3.0", 35 | "doxie.render": "^0.3.0", 36 | "husky": "^0.8.1" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Как добавить свой совет/трюк 2 | 3 | - [сделайте форк](https://github.com/Imangazaliev/git-tips/network) репозитория 4 | 5 | - установите зависимости: 6 | 7 | ```sh 8 | $ cd git-tips && npm install 9 | ``` 10 | 11 | **Внимание:** не думайте, что установка зависимостей является необязательной. Таким образом вы теряете преимущества от автоматической генерации README и содержания. Ваш пулл-реквест, скорее всего, не будет принят именно по этой причине. 12 | 13 | - добавьте ваш совет/трюк в файл [tips.json](tips.json): 14 | 15 | ```js 16 | { 17 | "title": <краткое-описание>, 18 | "description": <подробное-описание>, 19 | "tip": <команда>, 20 | "alternatives": [список альтернатив (опционально)] 21 | } 22 | ``` 23 | 24 | Для переноса строк можно использовать управляющий символ `\n`. Двойные кавычки необходимо экранировать с помощью обратного слеша. 25 | 26 | **Пример:** 27 | 28 | ```json 29 | { 30 | "title": "Изменить сообщение последнего коммита", 31 | "description": "При выполнении команды откроется редактор, указанный в настройках git. Необходимо изменить текст сообщения, сохранить файл и закрыть редактор.\n\nСообщение можно указать и непосредственно при вызове команды с помощью опции `-m` (`--message`)", 32 | "tip": "git commit --amend\n\n# можно указать сообщение с помощью опции -m\ngit commit --amend -m \"New message\"" 33 | }, 34 | ``` 35 | 36 | - cделайте коммит, пуш и отправьте пулл-реквест 37 | -------------------------------------------------------------------------------- /tips.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "Branch", 4 | "items": [ 5 | { 6 | "title": "Создать новую ветку и переключиться на нее", 7 | "tip": "git checkout -b ", 8 | "alternatives": [ 9 | "git branch && git checkout " 10 | ] 11 | }, 12 | { 13 | "title": "Создать новую ветку без родительской ветки", 14 | "tip": "git checkout --orphan " 15 | }, 16 | { 17 | "title": "Быстрое переключение на предыдущую ветку", 18 | "tip": "git checkout -" 19 | }, 20 | { 21 | "title": "Список локальных и удаленных веток", 22 | "tip": "git branch -a" 23 | }, 24 | { 25 | "title": "Список веток в удаленном репозитории", 26 | "tip": "git branch -r" 27 | }, 28 | { 29 | "title": "Показать все ветки (в том числе и удаленные ветки), а так же последний коммит в них", 30 | "tip": "git branch -vv" 31 | }, 32 | { 33 | "title": "Переименовать ветку", 34 | "tip": "git branch -m ", 35 | "alternatives": [ 36 | "git branch -m [] " 37 | ] 38 | }, 39 | { 40 | "title": "Удалить локальную ветку", 41 | "tip": "git branch -d " 42 | }, 43 | { 44 | "title": "Удалить ветку в удаленном репозитории", 45 | "tip": "git push origin --delete ", 46 | "alternatives": [ 47 | "git push origin :" 48 | ] 49 | }, 50 | { 51 | "title": "Показать название текущей ветки", 52 | "tip": "git rev-parse --abbrev-ref HEAD" 53 | }, 54 | { 55 | "title": "Показать все ветки, не слитые в master", 56 | "tip": "git checkout master && git branch --no-merged" 57 | }, 58 | { 59 | "title": "Показать список веток, которые уже слиты с веткой master", 60 | "tip": "git branch --merged master" 61 | }, 62 | { 63 | "title": "Переместить ветку feature на master и слить ее в мастер", 64 | "tip": "git rebase master feature && git checkout master && git merge -" 65 | }, 66 | { 67 | "title": "Удалить ветки, которые уже слиты с master", 68 | "tip": "git branch --merged master | grep -v '^\\*' | xargs -n 1 git branch -d", 69 | "alternatives": [ 70 | "git branch --merged master | grep -v '^\\*\\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out" 71 | ] 72 | }, 73 | { 74 | "title": "Найти ветки, которые содержат коммит с указанным хешем", 75 | "tip": "git branch -a --contains ", 76 | "alternatives": [ 77 | "git branch --contains " 78 | ] 79 | }, 80 | { 81 | "title": "Track upstream branch", 82 | "tip": "git branch -u origin/mybranch" 83 | } 84 | ] 85 | }, 86 | { 87 | "title": "Clean", 88 | "items": [ 89 | { 90 | "title": "Принудительно удалить неотслеживаемые файлы", 91 | "tip": "git clean -f" 92 | }, 93 | { 94 | "title": "Принудительно удалить неотслеживаемые файлы и директории", 95 | "tip": "git clean -f -d", 96 | "alternatives": [ 97 | "git clean -df" 98 | ] 99 | }, 100 | { 101 | "title": "Удалить все файлы, которые находятся в `.gitignore`", 102 | "tip": "git clean -X -f" 103 | }, 104 | { 105 | "title": "Before deleting untracked files/directory, do a dry run to get the list of these files/directories", 106 | "tip": "git clean -n" 107 | }, 108 | { 109 | "title": "Dry run (any command that supports dry-run flag should do)", 110 | "tip": "git clean -fd --dry-run" 111 | } 112 | ] 113 | }, 114 | { 115 | "title": "Commit", 116 | "items": [ 117 | { 118 | "title": "Изменить сообщение последнего коммита", 119 | "description": "При выполнении команды откроется редактор, указанный в настройках git. Необходимо изменить текст сообщения, сохранить файл и закрыть редактор.\n\nСообщение можно указать и непосредственно при вызове команды с помощью опции `-m` (`--message`)", 120 | "tip": "git commit --amend\n\n# можно указать сообщение с помощью опции -m\ngit commit --amend -m \"New message\"" 121 | }, 122 | { 123 | "title": "Изменить предыдущий коммит без изменения сообщения к коммиту", 124 | "tip": "git commit --amend --no-edit" 125 | }, 126 | { 127 | "title": "Исправить имя автора последнего коммита", 128 | "tip": "git commit --amend --no-edit --author='Author Name '" 129 | }, 130 | { 131 | "title": "Reset author, after author has been changed in the global config", 132 | "tip": "git commit --amend --reset-author --no-edit" 133 | }, 134 | { 135 | "title": "Создать коммит только с указанными файлами", 136 | "tip": "git commit --only " 137 | }, 138 | { 139 | "title": "Сделать коммит, обойдя хуки pre-commit и commit-msg", 140 | "tip": "git commit --no-verify", 141 | "alternatives": [ 142 | "git commit -n" 143 | ] 144 | }, 145 | { 146 | "title": "Отметить коммит как исправление к указанному коммиту", 147 | "tip": "git commit --fixup " 148 | } 149 | ] 150 | }, 151 | { 152 | "title": "Config", 153 | "items": [ 154 | { 155 | "title": "Показать конфиг и все псевдонимы (alias)", 156 | "tip": "git config --list" 157 | }, 158 | { 159 | "title": "Изменить локальный/глобальный конфиг git", 160 | "tip": "git config [--global] --edit" 161 | }, 162 | { 163 | "title": "Изменить текстовый редактор", 164 | "tip": "git config --global core.editor '$EDITOR'" 165 | }, 166 | { 167 | "title": "Игнорировать изменения прав доступа к файлам при коммите", 168 | "tip": "git config core.fileMode false" 169 | }, 170 | { 171 | "title": "Сделать git чувствительным к регистру", 172 | "tip": "git config --global core.ignorecase false" 173 | }, 174 | { 175 | "title": "Включить автоматическое исправление опечаток", 176 | "tip": "git config --global help.autocorrect 1" 177 | }, 178 | { 179 | "title": "Отключить цветной вывод Git", 180 | "tip": "git config --global color.ui false" 181 | }, 182 | { 183 | "title": "Specific color settings", 184 | "tip": "git config --global " 185 | }, 186 | { 187 | "title": "Удалить запись из глобального конфига", 188 | "tip": "git config --global --unset " 189 | }, 190 | { 191 | "title": "Reuse recorded resolution, record and reuse previous conflicts resolutions", 192 | "tip": "git config --global rerere.enabled 1" 193 | }, 194 | { 195 | "title": "Всегда выполнять перемещение вместо слияния при получении изменений из удаленного репозитория", 196 | "tip": "git config --global pull.rebase true", 197 | "alternatives": [ 198 | "#git < 1.7.9\ngit config --global branch.autosetuprebase always" 199 | ] 200 | }, 201 | { 202 | "title": "Псевдонимы (alias) для команд Git", 203 | "tip": "git config --global alias. \ngit config --global alias.st status" 204 | } 205 | ] 206 | }, 207 | { 208 | "title": "Diff", 209 | "items": [ 210 | { 211 | "title": "Показать изменения с момента последнего коммита", 212 | "tip": "git diff" 213 | }, 214 | { 215 | "title": "Показать все изменения (для файлов которых нет в индексе и которые уже там)", 216 | "tip": "git diff HEAD" 217 | }, 218 | { 219 | "title": "Изменения в файлах, которые находятся в индексе", 220 | "tip": "git diff --cached", 221 | "alternatives": [ 222 | "git diff --staged" 223 | ] 224 | }, 225 | { 226 | "title": "Показывать изменения в одну строку", 227 | "tip": "git diff --word-diff" 228 | }, 229 | { 230 | "title": "Показать список конфликтующих файлов", 231 | "tip": "git diff --name-only --diff-filter=U" 232 | }, 233 | { 234 | "title": "Открыть все конфликтующие файлы в редакторе", 235 | "tip": "git diff --name-only | uniq | xargs $EDITOR" 236 | }, 237 | { 238 | "title": "Список всех файлов, которые были изменены в коммите", 239 | "tip": "git diff-tree --no-commit-id --name-only -r " 240 | } 241 | ] 242 | }, 243 | { 244 | "title": "Index", 245 | "items": [ 246 | { 247 | "title": "Интерактивное добавление файлов в индекс", 248 | "tip": "git add -i" 249 | }, 250 | { 251 | "title": "Добавить в индекс часть файла", 252 | "tip": "git add -p" 253 | }, 254 | { 255 | "title": "Удалить файл из индекса", 256 | "tip": "git reset HEAD " 257 | }, 258 | { 259 | "title": "Удалить все файлы из индекса", 260 | "tip": "git reset HEAD" 261 | } 262 | ] 263 | }, 264 | { 265 | "title": "Log", 266 | "items": [ 267 | { 268 | "title": "Показать логи за определенный период (от-до)", 269 | "tip": "git log --since='FEB 1 2017' --until='FEB 14 2017'" 270 | }, 271 | { 272 | "title": "Показать коммиты за указанный промежуток времени", 273 | "tip": "git log --no-merges --raw --since='2 weeks ago'", 274 | "alternatives": [ 275 | "git whatchanged --since='2 weeks ago'" 276 | ] 277 | }, 278 | { 279 | "title": "Показать историю коммитов, сгрупировав их по имени автора", 280 | "tip": "git shortlog" 281 | }, 282 | { 283 | "title": "Показать историю коммитов, исключив коммиты указанного автора", 284 | "tip": "git log --perl-regexp --author='^((?!excluded-author-regex).*)$'" 285 | }, 286 | { 287 | "title": "Показать коммиты и изменения в них для определенного файла (даже если он был переименован)", 288 | "tip": "git log --follow -p -- " 289 | }, 290 | { 291 | "title": "List only the root and merge commits", 292 | "tip": "git log --first-parent" 293 | }, 294 | { 295 | "title": "Показать незапушенные коммиты", 296 | "tip": "git log --branches --not --remotes", 297 | "alternatives": [ 298 | "git log @{u}..", 299 | "git cherry -v" 300 | ] 301 | }, 302 | { 303 | "title": "Показать все коммиты с момента отделения от ветки master", 304 | "tip": "git log --no-merges --stat --reverse master.." 305 | }, 306 | { 307 | "title": "Коммиты в ветке branch-1, которых нет в branch-2", 308 | "tip": "git log branch-1 ^branch-2" 309 | }, 310 | { 311 | "title": "Показать GPG-сигнатуру в истории коммитов", 312 | "tip": "git log --show-signature" 313 | }, 314 | { 315 | "title": "Показать количество строк, которое добавил/удалил пользователь", 316 | "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 }' -", 317 | "alternatives": [ 318 | "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" 319 | ] 320 | }, 321 | { 322 | "title": "Поиск в истории коммитов по регулярному выражению", 323 | "tip": "git log --all --grep=''" 324 | }, 325 | { 326 | "title": "Показать все заметки (git notes)", 327 | "tip": "git log --show-notes='*'" 328 | }, 329 | { 330 | "title": "Показать дерево тегов (версий)", 331 | "tip": "git log --pretty=oneline --graph --decorate --all", 332 | "alternatives": [ 333 | "gitk --all" 334 | ] 335 | }, 336 | { 337 | "title": "Get first commit in a branch (from master)", 338 | "tip": "git log master.. --oneline | tail -1" 339 | } 340 | ] 341 | }, 342 | { 343 | "title": "Merge", 344 | "items": [ 345 | { 346 | "title": "Слить ветку feature с master, объединив все коммиты ветки feature в один", 347 | "description": "При этом коммит слияния не будет создан, вам нужно будет сделать его вручную.", 348 | "tip": "git merge feature --squash" 349 | } 350 | ] 351 | }, 352 | { 353 | "title": "Push", 354 | "items": [ 355 | { 356 | "title": "Отправить коммиты в удаленный репозиторий, перезаписав историю (force push)", 357 | "tip": "git push --force", 358 | "alternatives": [ 359 | "git push -f" 360 | ] 361 | }, 362 | { 363 | "title": "Forced push but still ensure you don't overwrite other's work", 364 | "tip": "git push --force-with-lease " 365 | } 366 | ] 367 | }, 368 | { 369 | "title": "Show", 370 | "items": [ 371 | { 372 | "title": "Показать изменения в коммите", 373 | "description": "Также можно использовать `HEAD~1`, `HEAD~2` и т.д. для просмотра предыдущих коммитов.", 374 | "tip": "git show HEAD" 375 | }, 376 | { 377 | "title": "Показать изменения в коммите (по хешу)", 378 | "tip": "git show " 379 | } 380 | ] 381 | }, 382 | { 383 | "title": "Stash", 384 | "items": [ 385 | { 386 | "title": "Спрятать текущие изменения для отслеживаемых файлов", 387 | "tip": "git stash", 388 | "alternatives": [ 389 | "git stash save" 390 | ] 391 | }, 392 | { 393 | "title": "Спрятать текущие изменения, включая неотслеживаемые файлы", 394 | "tip": "git stash -u", 395 | "alternatives": [ 396 | "git stash --include-untracked" 397 | ] 398 | }, 399 | { 400 | "title": "Спрятать текущие изменения за исключением файлов в индексе", 401 | "tip": "git stash --keep-index" 402 | }, 403 | { 404 | "title": "Спрятать только часть файла (файлов)", 405 | "description": "Позволяет выбрать изменения, которые необходимо скрыть", 406 | "tip": "git stash -p" 407 | }, 408 | { 409 | "title": "Показать список спрятанных изменений", 410 | "tip": "git stash list" 411 | }, 412 | { 413 | "title": "Применить последние спрятанные изменения и удалить их из стека", 414 | "tip": "git stash pop", 415 | "alternatives": [ 416 | "git stash apply stash@{0} && git stash drop stash@{0}" 417 | ] 418 | }, 419 | { 420 | "title": "Применить последние спрятанные изменения без удаления их из стека", 421 | "tip": "git stash apply " 422 | }, 423 | { 424 | "title": "Извлечь отдельный файл из stash", 425 | "tip": "git checkout -- ", 426 | "alternatives": [ 427 | "git checkout stash@{0} -- " 428 | ] 429 | }, 430 | { 431 | "title": "Очистить stash", 432 | "tip": "git stash clear", 433 | "alternatives": [ 434 | "git stash drop " 435 | ] 436 | } 437 | ] 438 | }, 439 | { 440 | "title": "Tags", 441 | "items": [ 442 | { 443 | "title": "Создать новый тег", 444 | "tip": "git tag " 445 | }, 446 | { 447 | "title": "Отправить теги на удаленный репозиторий", 448 | "tip": "git push --tags" 449 | }, 450 | { 451 | "title": "Удалить тег в локальном репозитории", 452 | "tip": "git tag -d " 453 | }, 454 | { 455 | "title": "Удалить тег в удаленном репозитории", 456 | "tip": "git push origin :refs/tags/", 457 | "alternatives": [ 458 | "git push origin :", 459 | "git push -d origin " 460 | ] 461 | } 462 | ] 463 | }, 464 | { 465 | "title": "Разное", 466 | "items": [ 467 | { 468 | "title": "Everyday Git in twenty commands or so", 469 | "tip": "git help everyday" 470 | }, 471 | { 472 | "title": "Show helpful guides that come with Git", 473 | "tip": "git help -g" 474 | }, 475 | { 476 | "title": "Клонировать отдельную ветку", 477 | "tip": "git clone -b --single-branch https://github.com/user/repo.git" 478 | }, 479 | { 480 | "title": "Клонировать репозиторий с указаным количеством коммитов", 481 | "tip": "git clone https://github.com/user/repo.git --depth 1" 482 | }, 483 | { 484 | "title": "Импортировать пакет в репозиторий", 485 | "tip": "git clone repo.bundle -b " 486 | }, 487 | { 488 | "title": "Alias: git undo", 489 | "tip": "git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'" 490 | }, 491 | { 492 | "title": "Получить данные из удаленного репозитория и сбросить состояние текущей ветки к ним", 493 | "tip": "git fetch --all && git reset --hard origin/master" 494 | }, 495 | { 496 | "title": "Prunes references to remote branches that have been deleted in the remote", 497 | "tip": "git fetch -p", 498 | "alternatives": [ 499 | "git remote prune origin" 500 | ] 501 | }, 502 | { 503 | "title": "Загрузить пулл-реквест в текущую ветку по ID", 504 | "tip": "git fetch origin pull//head:", 505 | "alternatives": [ 506 | "git pull origin pull//head:" 507 | ] 508 | }, 509 | { 510 | "title": "Specific fetch reference", 511 | "tip": "git fetch origin master:refs/remotes/origin/mymaster" 512 | }, 513 | { 514 | "title": "List of all files till a commit", 515 | "tip": "git ls-tree --name-only -r " 516 | }, 517 | { 518 | "title": "Git reset first commit", 519 | "tip": "git update-ref -d HEAD" 520 | }, 521 | { 522 | "title": "Показать самый последний тег на текущей ветке", 523 | "tip": "git describe --tags --abbrev=0" 524 | }, 525 | { 526 | "title": "Revert: отменить коммит с помощью нового коммита", 527 | "tip": "git revert " 528 | }, 529 | { 530 | "title": "Revert: отменить слияние (merge) с помощью нового коммита", 531 | "tip": "git revert -m 1 " 532 | }, 533 | { 534 | "title": "Reset: Отменить коммиты (сброс к указанному коммиту)", 535 | "tip": "git reset " 536 | }, 537 | { 538 | "title": "Показать историю коммитов только для текущей ветки", 539 | "tip": "git cherry -v master" 540 | }, 541 | { 542 | "title": "Показать список удаленных репозиториев", 543 | "tip": "git remote", 544 | "alternatives": [ 545 | "git remote show" 546 | ] 547 | }, 548 | { 549 | "title": "Изменить URL удаленного репозитория", 550 | "tip": "git remote set-url origin " 551 | }, 552 | { 553 | "title": "List references in a remote repository", 554 | "tip": "git ls-remote git://git.kernel.org/pub/scm/git/git.git" 555 | }, 556 | { 557 | "title": "Добавить удаленный репозиторий", 558 | "tip": "git remote add " 559 | }, 560 | { 561 | "title": "Автокомплит Git-команд в bash", 562 | "tip": "curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc" 563 | }, 564 | { 565 | "title": "Перенести коммиты из одной ветки в другую с помощью cherry-pick", 566 | "tip": "git checkout && git cherry-pick " 567 | }, 568 | { 569 | "title": "Undo local changes with the last content in head", 570 | "tip": "git checkout -- " 571 | }, 572 | { 573 | "title": "Показать все отслеживаемы файлы", 574 | "tip": "git ls-files -t" 575 | }, 576 | { 577 | "title": "Показать все неотслеживаемые файлы", 578 | "tip": "git ls-files --others" 579 | }, 580 | { 581 | "title": "Показать все игнорируемые файлы", 582 | "tip": "git ls-files --others -i --exclude-standard" 583 | }, 584 | { 585 | "title": "Create new working tree from a repository (git 2.5)", 586 | "tip": "git worktree add -b " 587 | }, 588 | { 589 | "title": "Create new working tree from HEAD state", 590 | "tip": "git worktree add --detach HEAD" 591 | }, 592 | { 593 | "title": "Не отслеживать файл (без удаления)", 594 | "description": "Удаляет файл из git, сохраняя при этом его локальную копию", 595 | "tip": "git rm --cached ", 596 | "alternatives": [ 597 | "git rm --cached -r " 598 | ] 599 | }, 600 | { 601 | "title": "Обновить все субмодули", 602 | "tip": "git submodule foreach git pull", 603 | "alternatives": [ 604 | "git submodule update --init --recursive", 605 | "git submodule update --remote" 606 | ] 607 | }, 608 | { 609 | "title": "Показать коммиты текущей ветки, которые будут слиты в мастер", 610 | "tip": "git cherry -v master", 611 | "alternatives": [ 612 | "git cherry -v master " 613 | ] 614 | }, 615 | { 616 | "title": "Retrieve the commit hash of the initial revision", 617 | "tip": " git rev-list --reverse HEAD | head -1", 618 | "alternatives": [ 619 | "git rev-list --max-parents=0 HEAD", 620 | "git log --pretty=oneline | tail -1 | cut -c 1-40", 621 | "git log --pretty=oneline --reverse | head -1 | cut -c 1-40" 622 | ] 623 | }, 624 | { 625 | "title": "Deploying git tracked subfolder to gh-pages", 626 | "tip": "git subtree push --prefix subfolder_name origin gh-pages", 627 | "alternatives":"git subtree push --prefix subfolder_name origin branch_name" 628 | }, 629 | { 630 | "title": "Adding a project to repo using subtree", 631 | "tip": "git subtree add --prefix=/ --squash git@github.com:/.git master" 632 | }, 633 | { 634 | "title": "Get latest changes in your repo for a linked project using subtree", 635 | "tip": "git subtree pull --prefix=/ --squash git@github.com:/.git master" 636 | }, 637 | { 638 | "title": "Экспортировать ветку в файл (создать пакет)", 639 | "tip": "git bundle create " 640 | }, 641 | { 642 | "title": "Архивировать ветку master", 643 | "tip": "git archive master --format=zip --output=master.zip" 644 | }, 645 | { 646 | "title": "Ignore one file on commit (e.g. Changelog)", 647 | "tip": "git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog" 648 | }, 649 | { 650 | "title": "Спрятать изменения перед выполнением перемещения", 651 | "tip": "git rebase --autostash" 652 | }, 653 | { 654 | "title": "Show changes using common diff tools", 655 | "tip": "git difftool -t " 656 | }, 657 | { 658 | "title": "Don’t consider changes for tracked file", 659 | "tip": "git update-index --assume-unchanged " 660 | }, 661 | { 662 | "title": "Undo assume-unchanged", 663 | "tip": "git update-index --no-assume-unchanged " 664 | }, 665 | { 666 | "title": "Восстановить удаленный файл", 667 | "tip": "git checkout ^ -- " 668 | }, 669 | { 670 | "title": "Restore file to a specific commit-hash", 671 | "tip": "git checkout -- " 672 | }, 673 | { 674 | "title": "Check if the change was a part of a release", 675 | "tip": "git name-rev --name-only " 676 | }, 677 | { 678 | "title": "Squash fixup commits normal commits", 679 | "tip": "git rebase -i --autosquash" 680 | }, 681 | { 682 | "title": "Показать список игнорируемых файлов", 683 | "tip": "git check-ignore *" 684 | }, 685 | { 686 | "title": "Статус игнорируемых файлов", 687 | "tip": "git status --ignored" 688 | }, 689 | { 690 | "title": "Count unpacked number of objects and their disk consumption", 691 | "tip": "git count-objects --human-readable" 692 | }, 693 | { 694 | "title": "Prune all unreachable objects from the object database", 695 | "tip": "git gc --prune=now --aggressive" 696 | }, 697 | { 698 | "title": "Instantly browse your working repository in gitweb", 699 | "tip": "git instaweb [--local] [--httpd=] [--port=] [--browser=]" 700 | }, 701 | { 702 | "title": "Получить файл из другой ветки", 703 | "tip": "git show :" 704 | }, 705 | { 706 | "title": "Изменить коммиты в интерактивном режиме", 707 | "tip": "git rebase --interactive HEAD~2" 708 | }, 709 | { 710 | "title": "Поиск коммита с багом при помощи бинарного поиска", 711 | "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" 712 | }, 713 | { 714 | "title": "Показать все локальные ветки, отсортировав их по дате изменения", 715 | "tip": "git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/" 716 | }, 717 | { 718 | "title": "Find lines matching the pattern (regex or string) in tracked files", 719 | "tip": "git grep --heading --line-number 'foo bar'" 720 | }, 721 | { 722 | "title": "Количество коммитов в ветке", 723 | "tip": "git rev-list --count " 724 | }, 725 | { 726 | "title": "Добавить заметку", 727 | "tip": "git notes add -m 'Note on the previous commit....'" 728 | }, 729 | { 730 | "title": "Apply commit from another repository", 731 | "tip": "git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k" 732 | }, 733 | { 734 | "title": "Найти общего предка двух веток", 735 | "tip": "diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1" 736 | }, 737 | { 738 | "title": "Показывает автора, время и хеш-коммита последнего изменения для каждой строки файла", 739 | "description": "Также можно выполнить команду с флагом `-s` для того, чтобы показывать автора и время коммита", 740 | "tip": "git blame " 741 | }, 742 | { 743 | "title": "Показывает автора, время и хеш-коммита последнего изменения для указанного диапазона строк", 744 | "tip": "git blame -L ," 745 | }, 746 | { 747 | "title": "Show a Git logical variable", 748 | "tip": "git var -l | " 749 | }, 750 | { 751 | "title": "Preformatted patch file", 752 | "tip": "git format-patch -M upstream..topic" 753 | }, 754 | { 755 | "title": "Показать название репозитория", 756 | "tip": "git rev-parse --show-toplevel" 757 | }, 758 | { 759 | "title": "Generates a summary of pending changes", 760 | "tip": "git request-pull v1.0 https://git.ko.xz/project master:for-linus" 761 | }, 762 | { 763 | "title": "Сделать резервную копию неотслеживаемых файлов", 764 | "tip": "git ls-files --others -i --exclude-standard | xargs zip untracked.zip" 765 | } 766 | ] 767 | } 768 | ] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Git Tips 2 | 3 | Часто используемые трюки и советы при работе с Git. 4 | 5 | Хотите дополнить список? Ознакомьтесь с [CONTRIBUTING.md](CONTRIBUTING.md) 6 | 7 | [English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips) 8 | 9 | ### Tools: 10 | 11 | * [git-tip](https://www.npmjs.com/package/git-tip) - консольная утилита, облегчающая использование всех этих команд. Docker-контейнер можно найти [здесь](https://github.com/djoudi5/docker-git-tip) 12 | 13 | **P.S:** Все эти команды были проверены в `git version 2.7.4 (Apple Git-66)` 14 | 15 | 16 | 17 | ### Branch 18 | 19 | - [Создать новую ветку и переключиться на нее](#Создать-новую-ветку-и-переключиться-на-нее) 20 | - [Создать новую ветку без родительской ветки](#Создать-новую-ветку-без-родительской-ветки) 21 | - [Быстрое переключение на предыдущую ветку](#Быстрое-переключение-на-предыдущую-ветку) 22 | - [Список локальных и удаленных веток](#Список-локальных-и-удаленных-веток) 23 | - [Список веток в удаленном репозитории](#Список-веток-в-удаленном-репозитории) 24 | - [Показать все ветки (в том числе и удаленные ветки), а так же последний коммит в них](#Показать-все-ветки-в-том-числе-и-удаленные-ветки-а-так-же-последний-коммит-в-них) 25 | - [Переименовать ветку](#Переименовать-ветку) 26 | - [Удалить локальную ветку](#Удалить-локальную-ветку) 27 | - [Удалить ветку в удаленном репозитории](#Удалить-ветку-в-удаленном-репозитории) 28 | - [Показать название текущей ветки](#Показать-название-текущей-ветки) 29 | - [Показать все ветки, не слитые в master](#Показать-все-ветки-не-слитые-в-master) 30 | - [Показать список веток, которые уже слиты с веткой master](#Показать-список-веток-которые-уже-слиты-с-веткой-master) 31 | - [Переместить ветку feature на master и слить ее в мастер](#Переместить-ветку-feature-на-master-и-слить-ее-в-мастер) 32 | - [Удалить ветки, которые уже слиты с master](#Удалить-ветки-которые-уже-слиты-с-master) 33 | - [Найти ветки, которые содержат коммит с указанным хешем](#Найти-ветки-которые-содержат-коммит-с-указанным-хешем) 34 | - [Track upstream branch](#track-upstream-branch) 35 | 36 | ### Clean 37 | 38 | - [Принудительно удалить неотслеживаемые файлы](#Принудительно-удалить-неотслеживаемые-файлы) 39 | - [Принудительно удалить неотслеживаемые файлы и директории](#Принудительно-удалить-неотслеживаемые-файлы-и-директории) 40 | - [Удалить все файлы, которые находятся в `.gitignore`](#Удалить-все-файлы-которые-находятся-в-gitignore) 41 | - [Before deleting untracked files/directory, do a dry run to get the list of these files/directories](#before-deleting-untracked-filesdirectory-do-a-dry-run-to-get-the-list-of-these-filesdirectories) 42 | - [Dry run (any command that supports dry-run flag should do)](#dry-run-any-command-that-supports-dry-run-flag-should-do) 43 | 44 | ### Commit 45 | 46 | - [Изменить сообщение последнего коммита](#Изменить-сообщение-последнего-коммита) 47 | - [Изменить предыдущий коммит без изменения сообщения к коммиту](#Изменить-предыдущий-коммит-без-изменения-сообщения-к-коммиту) 48 | - [Исправить имя автора последнего коммита](#Исправить-имя-автора-последнего-коммита) 49 | - [Reset author, after author has been changed in the global config](#reset-author-after-author-has-been-changed-in-the-global-config) 50 | - [Создать коммит только с указанными файлами](#Создать-коммит-только-с-указанными-файлами) 51 | - [Сделать коммит, обойдя хуки pre-commit и commit-msg](#Сделать-коммит-обойдя-хуки-pre-commit-и-commit-msg) 52 | - [Отметить коммит как исправление к указанному коммиту](#Отметить-коммит-как-исправление-к-указанному-коммиту) 53 | 54 | ### Config 55 | 56 | - [Показать конфиг и все псевдонимы (alias)](#Показать-конфиг-и-все-псевдонимы-alias) 57 | - [Изменить локальный/глобальный конфиг git](#Изменить-локальныйглобальный-конфиг-git) 58 | - [Изменить текстовый редактор](#Изменить-текстовый-редактор) 59 | - [Игнорировать изменения прав доступа к файлам при коммите](#Игнорировать-изменения-прав-доступа-к-файлам-при-коммите) 60 | - [Сделать git чувствительным к регистру](#Сделать-git-чувствительным-к-регистру) 61 | - [Включить автоматическое исправление опечаток](#Включить-автоматическое-исправление-опечаток) 62 | - [Отключить цветной вывод Git](#Отключить-цветной-вывод-git) 63 | - [Specific color settings](#specific-color-settings) 64 | - [Удалить запись из глобального конфига](#Удалить-запись-из-глобального-конфига) 65 | - [Reuse recorded resolution, record and reuse previous conflicts resolutions](#reuse-recorded-resolution-record-and-reuse-previous-conflicts-resolutions) 66 | - [Всегда выполнять перемещение вместо слияния при получении изменений из удаленного репозитория](#Всегда-выполнять-перемещение-вместо-слияния-при-получении-изменений-из-удаленного-репозитория) 67 | - [Псевдонимы (alias) для команд Git](#Псевдонимы-alias-для-команд-git) 68 | 69 | ### Diff 70 | 71 | - [Показать изменения с момента последнего коммита](#Показать-изменения-с-момента-последнего-коммита) 72 | - [Показать все изменения (для файлов которых нет в индексе и которые уже там)](#Показать-все-изменения-для-файлов-которых-нет-в-индексе-и-которые-уже-там) 73 | - [Изменения в файлах, которые находятся в индексе](#Изменения-в-файлах-которые-находятся-в-индексе) 74 | - [Показывать изменения в одну строку](#Показывать-изменения-в-одну-строку) 75 | - [Показать список конфликтующих файлов](#Показать-список-конфликтующих-файлов) 76 | - [Открыть все конфликтующие файлы в редакторе](#Открыть-все-конфликтующие-файлы-в-редакторе) 77 | - [Список всех файлов, которые были изменены в коммите](#Список-всех-файлов-которые-были-изменены-в-коммите) 78 | 79 | ### Index 80 | 81 | - [Интерактивное добавление файлов в индекс](#Интерактивное-добавление-файлов-в-индекс) 82 | - [Добавить в индекс часть файла](#Добавить-в-индекс-часть-файла) 83 | - [Удалить файл из индекса](#Удалить-файл-из-индекса) 84 | - [Удалить все файлы из индекса](#Удалить-все-файлы-из-индекса) 85 | 86 | ### Log 87 | 88 | - [Показать логи за определенный период (от-до)](#Показать-логи-за-определенный-период-от-до) 89 | - [Показать коммиты за указанный промежуток времени](#Показать-коммиты-за-указанный-промежуток-времени) 90 | - [Показать историю коммитов, сгрупировав их по имени автора](#Показать-историю-коммитов-сгрупировав-их-по-имени-автора) 91 | - [Показать историю коммитов, исключив коммиты указанного автора](#Показать-историю-коммитов-исключив-коммиты-указанного-автора) 92 | - [Показать коммиты и изменения в них для определенного файла (даже если он был переименован)](#Показать-коммиты-и-изменения-в-них-для-определенного-файла-даже-если-он-был-переименован) 93 | - [List only the root and merge commits](#list-only-the-root-and-merge-commits) 94 | - [Показать незапушенные коммиты](#Показать-незапушенные-коммиты) 95 | - [Показать все коммиты с момента отделения от ветки master](#Показать-все-коммиты-с-момента-отделения-от-ветки-master) 96 | - [Коммиты в ветке branch-1, которых нет в branch-2](#Коммиты-в-ветке-branch-1-которых-нет-в-branch-2) 97 | - [Показать GPG-сигнатуру в истории коммитов](#Показать-gpg-сигнатуру-в-истории-коммитов) 98 | - [Показать количество строк, которое добавил/удалил пользователь](#Показать-количество-строк-которое-добавилудалил-пользователь) 99 | - [Поиск в истории коммитов по регулярному выражению](#Поиск-в-истории-коммитов-по-регулярному-выражению) 100 | - [Показать все заметки (git notes)](#Показать-все-заметки-git-notes) 101 | - [Показать дерево тегов (версий)](#Показать-дерево-тегов-версий) 102 | - [Get first commit in a branch (from master)](#get-first-commit-in-a-branch-from-master) 103 | 104 | ### Merge 105 | 106 | - [Слить ветку feature с master, объединив все коммиты ветки feature в один](#Слить-ветку-feature-с-master-объединив-все-коммиты-ветки-feature-в-один) 107 | 108 | ### Push 109 | 110 | - [Отправить коммиты в удаленный репозиторий, перезаписав историю (force push)](#Отправить-коммиты-в-удаленный-репозиторий-перезаписав-историю-force-push) 111 | - [Отправить коммиты в удаленный репозиторий с проверкой, что вы не затираете чужие коммиты](#Отправить-коммиты-в-удаленный-репозиторий-с-проверкой-что-вы-не-затираете-чужие-коммиты) 112 | - [Автоматически устанавливать remote для ветки при пуше](#Автоматически-устанавливать-remote-для-ветки-при-пуше) 113 | 114 | ### Show 115 | 116 | - [Показать изменения в коммите](#Показать-изменения-в-коммите) 117 | - [Показать изменения в коммите (по хешу)](#Показать-изменения-в-коммите-по-хешу) 118 | 119 | ### Stash 120 | 121 | - [Спрятать текущие изменения для отслеживаемых файлов](#Спрятать-текущие-изменения-для-отслеживаемых-файлов) 122 | - [Спрятать текущие изменения, включая неотслеживаемые файлы](#Спрятать-текущие-изменения-включая-неотслеживаемые-файлы) 123 | - [Спрятать текущие изменения за исключением файлов в индексе](#Спрятать-текущие-изменения-за-исключением-файлов-в-индексе) 124 | - [Спрятать только часть файла (файлов)](#Спрятать-только-часть-файла-файлов) 125 | - [Показать список спрятанных изменений](#Показать-список-спрятанных-изменений) 126 | - [Применить последние спрятанные изменения и удалить их из стека](#Применить-последние-спрятанные-изменения-и-удалить-их-из-стека) 127 | - [Применить последние спрятанные изменения без удаления их из стека](#Применить-последние-спрятанные-изменения-без-удаления-их-из-стека) 128 | - [Извлечь отдельный файл из stash](#Извлечь-отдельный-файл-из-stash) 129 | - [Очистить stash](#Очистить-stash) 130 | 131 | ### Tags 132 | 133 | - [Создать новый тег](#Создать-новый-тег) 134 | - [Отправить теги на удаленный репозиторий](#Отправить-теги-на-удаленный-репозиторий) 135 | - [Удалить тег в локальном репозитории](#Удалить-тег-в-локальном-репозитории) 136 | - [Удалить тег в удаленном репозитории](#Удалить-тег-в-удаленном-репозитории) 137 | 138 | ### Разное 139 | 140 | - [Everyday Git in twenty commands or so](#everyday-git-in-twenty-commands-or-so) 141 | - [Show helpful guides that come with Git](#show-helpful-guides-that-come-with-git) 142 | - [Клонировать отдельную ветку](#Клонировать-отдельную-ветку) 143 | - [Клонировать репозиторий с указаным количеством коммитов](#Клонировать-репозиторий-с-указаным-количеством-коммитов) 144 | - [Импортировать пакет в репозиторий](#Импортировать-пакет-в-репозиторий) 145 | - [Alias: git undo](#alias-git-undo) 146 | - [Получить данные из удаленного репозитория и сбросить состояние текущей ветки к ним](#Получить-данные-из-удаленного-репозитория-и-сбросить-состояние-текущей-ветки-к-ним) 147 | - [Prunes references to remote branches that have been deleted in the remote](#prunes-references-to-remote-branches-that-have-been-deleted-in-the-remote) 148 | - [Загрузить пулл-реквест в текущую ветку по ID](#Загрузить-пулл-реквест-в-текущую-ветку-по-id) 149 | - [Specific fetch reference](#specific-fetch-reference) 150 | - [List of all files till a commit](#list-of-all-files-till-a-commit) 151 | - [Git reset first commit](#git-reset-first-commit) 152 | - [Показать самый последний тег на текущей ветке](#Показать-самый-последний-тег-на-текущей-ветке) 153 | - [Revert: отменить коммит с помощью нового коммита](#revert-отменить-коммит-с-помощью-нового-коммита) 154 | - [Revert: отменить слияние (merge) с помощью нового коммита](#revert-отменить-слияние-merge-с-помощью-нового-коммита) 155 | - [Reset: Отменить коммиты (сброс к указанному коммиту)](#reset-Отменить-коммиты-сброс-к-указанному-коммиту) 156 | - [Показать историю коммитов только для текущей ветки](#Показать-историю-коммитов-только-для-текущей-ветки) 157 | - [Показать список удаленных репозиториев](#Показать-список-удаленных-репозиториев) 158 | - [Изменить URL удаленного репозитория](#Изменить-url-удаленного-репозитория) 159 | - [List references in a remote repository](#list-references-in-a-remote-repository) 160 | - [Добавить удаленный репозиторий](#Добавить-удаленный-репозиторий) 161 | - [Автокомплит Git-команд в bash](#Автокомплит-git-команд-в-bash) 162 | - [Перенести коммиты из одной ветки в другую с помощью cherry-pick](#Перенести-коммиты-из-одной-ветки-в-другую-с-помощью-cherry-pick) 163 | - [Undo local changes with the last content in head](#undo-local-changes-with-the-last-content-in-head) 164 | - [Показать все отслеживаемы файлы](#Показать-все-отслеживаемы-файлы) 165 | - [Показать все неотслеживаемые файлы](#Показать-все-неотслеживаемые-файлы) 166 | - [Показать все игнорируемые файлы](#Показать-все-игнорируемые-файлы) 167 | - [Create new working tree from a repository (git 2.5)](#create-new-working-tree-from-a-repository-git-25) 168 | - [Create new working tree from HEAD state](#create-new-working-tree-from-head-state) 169 | - [Не отслеживать файл (без удаления)](#Не-отслеживать-файл-без-удаления) 170 | - [Обновить все субмодули](#Обновить-все-субмодули) 171 | - [Показать коммиты текущей ветки, которые будут слиты в мастер](#Показать-коммиты-текущей-ветки-которые-будут-слиты-в-мастер) 172 | - [Retrieve the commit hash of the initial revision](#retrieve-the-commit-hash-of-the-initial-revision) 173 | - [Deploying git tracked subfolder to gh-pages](#deploying-git-tracked-subfolder-to-gh-pages) 174 | - [Adding a project to repo using subtree](#adding-a-project-to-repo-using-subtree) 175 | - [Get latest changes in your repo for a linked project using subtree](#get-latest-changes-in-your-repo-for-a-linked-project-using-subtree) 176 | - [Экспортировать ветку в файл (создать пакет)](#Экспортировать-ветку-в-файл-создать-пакет) 177 | - [Архивировать ветку master](#Архивировать-ветку-master) 178 | - [Ignore one file on commit (e.g. Changelog)](#ignore-one-file-on-commit-eg-changelog) 179 | - [Спрятать изменения перед выполнением перемещения](#Спрятать-изменения-перед-выполнением-перемещения) 180 | - [Show changes using common diff tools](#show-changes-using-common-diff-tools) 181 | - [Don’t consider changes for tracked file](#dont-consider-changes-for-tracked-file) 182 | - [Undo assume-unchanged](#undo-assume-unchanged) 183 | - [Восстановить удаленный файл](#Восстановить-удаленный-файл) 184 | - [Restore file to a specific commit-hash](#restore-file-to-a-specific-commit-hash) 185 | - [Check if the change was a part of a release](#check-if-the-change-was-a-part-of-a-release) 186 | - [Squash fixup commits normal commits](#squash-fixup-commits-normal-commits) 187 | - [Показать список игнорируемых файлов](#Показать-список-игнорируемых-файлов) 188 | - [Статус игнорируемых файлов](#Статус-игнорируемых-файлов) 189 | - [Count unpacked number of objects and their disk consumption](#count-unpacked-number-of-objects-and-their-disk-consumption) 190 | - [Prune all unreachable objects from the object database](#prune-all-unreachable-objects-from-the-object-database) 191 | - [Instantly browse your working repository in gitweb](#instantly-browse-your-working-repository-in-gitweb) 192 | - [Получить файл из другой ветки](#Получить-файл-из-другой-ветки) 193 | - [Изменить коммиты в интерактивном режиме](#Изменить-коммиты-в-интерактивном-режиме) 194 | - [Поиск коммита с багом при помощи бинарного поиска](#Поиск-коммита-с-багом-при-помощи-бинарного-поиска) 195 | - [Показать все локальные ветки, отсортировав их по дате изменения](#Показать-все-локальные-ветки-отсортировав-их-по-дате-изменения) 196 | - [Find lines matching the pattern (regex or string) in tracked files](#find-lines-matching-the-pattern-regex-or-string-in-tracked-files) 197 | - [Количество коммитов в ветке](#Количество-коммитов-в-ветке) 198 | - [Добавить заметку](#Добавить-заметку) 199 | - [Apply commit from another repository](#apply-commit-from-another-repository) 200 | - [Найти общего предка двух веток](#Найти-общего-предка-двух-веток) 201 | - [Показывает автора, время и хеш-коммита последнего изменения для каждой строки файла](#Показывает-автора-время-и-хеш-коммита-последнего-изменения-для-каждой-строки-файла) 202 | - [Показывает автора, время и хеш-коммита последнего изменения для указанного диапазона строк](#Показывает-автора-время-и-хеш-коммита-последнего-изменения-для-указанного-диапазона-строк) 203 | - [Show a Git logical variable](#show-a-git-logical-variable) 204 | - [Preformatted patch file](#preformatted-patch-file) 205 | - [Показать название репозитория](#Показать-название-репозитория) 206 | - [Generates a summary of pending changes](#generates-a-summary-of-pending-changes) 207 | - [Сделать резервную копию неотслеживаемых файлов](#Сделать-резервную-копию-неотслеживаемых-файлов) 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | ## Branch 218 | 219 | ### Создать новую ветку и переключиться на нее 220 | ```sh 221 | git checkout -b 222 | ``` 223 | 224 | __Alternatives:__ 225 | ```sh 226 | git branch && git checkout 227 | ``` 228 | 229 | ### Создать новую ветку без родительской ветки 230 | ```sh 231 | git checkout --orphan 232 | ``` 233 | 234 | ### Быстрое переключение на предыдущую ветку 235 | ```sh 236 | git checkout - 237 | ``` 238 | 239 | ### Список локальных и удаленных веток 240 | ```sh 241 | git branch -a 242 | ``` 243 | 244 | ### Список веток в удаленном репозитории 245 | ```sh 246 | git branch -r 247 | ``` 248 | 249 | ### Показать все ветки (в том числе и удаленные ветки), а так же последний коммит в них 250 | ```sh 251 | git branch -vv 252 | ``` 253 | 254 | ### Переименовать ветку 255 | ```sh 256 | git branch -m 257 | ``` 258 | 259 | __Alternatives:__ 260 | ```sh 261 | git branch -m [] 262 | ``` 263 | 264 | ### Удалить локальную ветку 265 | ```sh 266 | git branch -d 267 | ``` 268 | 269 | ### Удалить ветку в удаленном репозитории 270 | ```sh 271 | git push origin --delete 272 | ``` 273 | 274 | __Alternatives:__ 275 | ```sh 276 | git push origin : 277 | ``` 278 | 279 | ### Показать название текущей ветки 280 | ```sh 281 | git rev-parse --abbrev-ref HEAD 282 | ``` 283 | 284 | ### Показать все ветки, не слитые в master 285 | ```sh 286 | git checkout master && git branch --no-merged 287 | ``` 288 | 289 | ### Показать список веток, которые уже слиты с веткой master 290 | ```sh 291 | git branch --merged master 292 | ``` 293 | 294 | ### Переместить ветку feature на master и слить ее в мастер 295 | ```sh 296 | git rebase master feature && git checkout master && git merge - 297 | ``` 298 | 299 | ### Удалить ветки, которые уже слиты с master 300 | ```sh 301 | git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d 302 | ``` 303 | 304 | __Alternatives:__ 305 | ```sh 306 | git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out 307 | ``` 308 | 309 | ### Найти ветки, которые содержат коммит с указанным хешем 310 | ```sh 311 | git branch -a --contains 312 | ``` 313 | 314 | __Alternatives:__ 315 | ```sh 316 | git branch --contains 317 | ``` 318 | 319 | ### Track upstream branch 320 | ```sh 321 | git branch -u origin/mybranch 322 | ``` 323 | 324 | ## Clean 325 | 326 | ### Принудительно удалить неотслеживаемые файлы 327 | ```sh 328 | git clean -f 329 | ``` 330 | 331 | ### Принудительно удалить неотслеживаемые файлы и директории 332 | ```sh 333 | git clean -f -d 334 | ``` 335 | 336 | __Alternatives:__ 337 | ```sh 338 | git clean -df 339 | ``` 340 | 341 | ### Удалить все файлы, которые находятся в `.gitignore` 342 | ```sh 343 | git clean -X -f 344 | ``` 345 | 346 | ### Before deleting untracked files/directory, do a dry run to get the list of these files/directories 347 | ```sh 348 | git clean -n 349 | ``` 350 | 351 | ### Dry run (any command that supports dry-run flag should do) 352 | ```sh 353 | git clean -fd --dry-run 354 | ``` 355 | 356 | ## Commit 357 | 358 | ### Изменить сообщение последнего коммита 359 | При выполнении команды откроется редактор, указанный в настройках git. Необходимо изменить текст сообщения, сохранить файл и закрыть редактор. 360 | 361 | Сообщение можно указать и непосредственно при вызове команды с помощью опции `-m` (`--message`) 362 | ```sh 363 | git commit --amend 364 | 365 | # можно указать сообщение с помощью опции -m 366 | git commit --amend -m "New message" 367 | ``` 368 | 369 | ### Изменить предыдущий коммит без изменения сообщения к коммиту 370 | ```sh 371 | git commit --amend --no-edit 372 | ``` 373 | 374 | ### Исправить имя автора последнего коммита 375 | ```sh 376 | git commit --amend --no-edit --author='Author Name ' 377 | ``` 378 | 379 | ### Reset author, after author has been changed in the global config 380 | ```sh 381 | git commit --amend --reset-author --no-edit 382 | ``` 383 | 384 | ### Создать коммит только с указанными файлами 385 | ```sh 386 | git commit --only 387 | ``` 388 | 389 | ### Сделать коммит, обойдя хуки pre-commit и commit-msg 390 | ```sh 391 | git commit --no-verify 392 | ``` 393 | 394 | __Alternatives:__ 395 | ```sh 396 | git commit -n 397 | ``` 398 | 399 | ### Отметить коммит как исправление к указанному коммиту 400 | ```sh 401 | git commit --fixup 402 | ``` 403 | 404 | ## Config 405 | 406 | ### Показать конфиг и все псевдонимы (alias) 407 | ```sh 408 | git config --list 409 | ``` 410 | 411 | ### Изменить локальный/глобальный конфиг git 412 | ```sh 413 | git config [--global] --edit 414 | ``` 415 | 416 | ### Изменить текстовый редактор 417 | ```sh 418 | git config --global core.editor '$EDITOR' 419 | ``` 420 | 421 | ### Игнорировать изменения прав доступа к файлам при коммите 422 | ```sh 423 | git config core.fileMode false 424 | ``` 425 | 426 | ### Сделать git чувствительным к регистру 427 | ```sh 428 | git config --global core.ignorecase false 429 | ``` 430 | 431 | ### Включить автоматическое исправление опечаток 432 | ```sh 433 | git config --global help.autocorrect 1 434 | ``` 435 | 436 | ### Отключить цветной вывод Git 437 | ```sh 438 | git config --global color.ui false 439 | ``` 440 | 441 | ### Specific color settings 442 | ```sh 443 | git config --global 444 | ``` 445 | 446 | ### Удалить запись из глобального конфига 447 | ```sh 448 | git config --global --unset 449 | ``` 450 | 451 | ### Reuse recorded resolution, record and reuse previous conflicts resolutions 452 | ```sh 453 | git config --global rerere.enabled 1 454 | ``` 455 | 456 | ### Всегда выполнять перемещение вместо слияния при получении изменений из удаленного репозитория 457 | ```sh 458 | git config --global pull.rebase true 459 | ``` 460 | 461 | __Alternatives:__ 462 | ```sh 463 | #git < 1.7.9 464 | git config --global branch.autosetuprebase always 465 | ``` 466 | 467 | ### Псевдонимы (alias) для команд Git 468 | ```sh 469 | git config --global alias. 470 | git config --global alias.st status 471 | ``` 472 | 473 | ## Diff 474 | 475 | ### Показать изменения с момента последнего коммита 476 | ```sh 477 | git diff 478 | ``` 479 | 480 | ### Показать все изменения (для файлов которых нет в индексе и которые уже там) 481 | ```sh 482 | git diff HEAD 483 | ``` 484 | 485 | ### Изменения в файлах, которые находятся в индексе 486 | ```sh 487 | git diff --cached 488 | ``` 489 | 490 | __Alternatives:__ 491 | ```sh 492 | git diff --staged 493 | ``` 494 | 495 | ### Показывать изменения в одну строку 496 | ```sh 497 | git diff --word-diff 498 | ``` 499 | 500 | ### Показать список конфликтующих файлов 501 | ```sh 502 | git diff --name-only --diff-filter=U 503 | ``` 504 | 505 | ### Открыть все конфликтующие файлы в редакторе 506 | ```sh 507 | git diff --name-only | uniq | xargs $EDITOR 508 | ``` 509 | 510 | ### Список всех файлов, которые были изменены в коммите 511 | ```sh 512 | git diff-tree --no-commit-id --name-only -r 513 | ``` 514 | 515 | ## Index 516 | 517 | ### Интерактивное добавление файлов в индекс 518 | ```sh 519 | git add -i 520 | ``` 521 | 522 | ### Добавить в индекс часть файла 523 | ```sh 524 | git add -p 525 | ``` 526 | 527 | ### Удалить файл из индекса 528 | ```sh 529 | git reset HEAD 530 | ``` 531 | 532 | ### Удалить все файлы из индекса 533 | ```sh 534 | git reset HEAD 535 | ``` 536 | 537 | ## Log 538 | 539 | ### Показать логи за определенный период (от-до) 540 | ```sh 541 | git log --since='FEB 1 2017' --until='FEB 14 2017' 542 | ``` 543 | 544 | ### Показать коммиты за указанный промежуток времени 545 | ```sh 546 | git log --no-merges --raw --since='2 weeks ago' 547 | ``` 548 | 549 | __Alternatives:__ 550 | ```sh 551 | git whatchanged --since='2 weeks ago' 552 | ``` 553 | 554 | ### Показать историю коммитов, сгрупировав их по имени автора 555 | ```sh 556 | git shortlog 557 | ``` 558 | 559 | ### Показать историю коммитов, исключив коммиты указанного автора 560 | ```sh 561 | git log --perl-regexp --author='^((?!excluded-author-regex).*) 562 | 563 | ``` 564 | 565 | ### Показать коммиты и изменения в них для определенного файла (даже если он был переименован) 566 | ```sh 567 | git log --follow -p -- 568 | ``` 569 | 570 | ### List only the root and merge commits 571 | ```sh 572 | git log --first-parent 573 | ``` 574 | 575 | ### Показать незапушенные коммиты 576 | ```sh 577 | git log --branches --not --remotes 578 | ``` 579 | 580 | __Alternatives:__ 581 | ```sh 582 | git log @{u}.. 583 | ``` 584 | 585 | ```sh 586 | git cherry -v 587 | ``` 588 | 589 | ### Показать все коммиты с момента отделения от ветки master 590 | ```sh 591 | git log --no-merges --stat --reverse master.. 592 | ``` 593 | 594 | ### Коммиты в ветке branch-1, которых нет в branch-2 595 | ```sh 596 | git log branch-1 ^branch-2 597 | ``` 598 | 599 | ### Показать GPG-сигнатуру в истории коммитов 600 | ```sh 601 | git log --show-signature 602 | ``` 603 | 604 | ### Показать количество строк, которое добавил/удалил пользователь 605 | ```sh 606 | git log --author='Your Name Here' --pretty=tformat: --numstat | gawk '{ add += ; subs += ; loc += - } END { printf "added lines: %s removed lines: %s total lines: %s 607 | ", add, subs, loc }' - 608 | ``` 609 | 610 | __Alternatives:__ 611 | ```sh 612 | git log --author='Your Name Here' --pretty=tformat: --numstat | awk '{ add += ; subs += ; loc += - } END { printf "added lines: %s, removed lines: %s, total lines: %s 613 | ", add, subs, loc }' - # on Mac OSX 614 | ``` 615 | 616 | ### Поиск в истории коммитов по регулярному выражению 617 | ```sh 618 | git log --all --grep='' 619 | ``` 620 | 621 | ### Показать все заметки (git notes) 622 | ```sh 623 | git log --show-notes='*' 624 | ``` 625 | 626 | ### Показать дерево тегов (версий) 627 | ```sh 628 | git log --pretty=oneline --graph --decorate --all 629 | ``` 630 | 631 | __Alternatives:__ 632 | ```sh 633 | gitk --all 634 | ``` 635 | 636 | ### Get first commit in a branch (from master) 637 | ```sh 638 | git log master.. --oneline | tail -1 639 | ``` 640 | 641 | ## Merge 642 | 643 | ### Слить ветку feature с master, объединив все коммиты ветки feature в один 644 | При этом коммит слияния не будет создан, вам нужно будет сделать его вручную. 645 | ```sh 646 | git merge feature --squash 647 | ``` 648 | 649 | ## Push 650 | 651 | ### Отправить коммиты в удаленный репозиторий, перезаписав историю (force push) 652 | ```sh 653 | git push --force 654 | ``` 655 | 656 | __Alternatives:__ 657 | ```sh 658 | git push -f 659 | ``` 660 | 661 | ### Отправить коммиты в удаленный репозиторий с проверкой, что вы не затираете чужие коммиты 662 | ```sh 663 | git push --force-with-lease 664 | ``` 665 | 666 | ### Автоматически устанавливать remote для ветки при пуше 667 | 668 | ### 669 | ```sh 670 | git config --global push.autoSetupRemote true 671 | ``` 672 | 673 | ## Show 674 | 675 | ### Показать изменения в коммите 676 | Также можно использовать `HEAD~1`, `HEAD~2` и т.д. для просмотра предыдущих коммитов. 677 | ```sh 678 | git show HEAD 679 | ``` 680 | 681 | ### Показать изменения в коммите (по хешу) 682 | ```sh 683 | git show 684 | ``` 685 | 686 | ## Stash 687 | 688 | ### Спрятать текущие изменения для отслеживаемых файлов 689 | ```sh 690 | git stash 691 | ``` 692 | 693 | __Alternatives:__ 694 | ```sh 695 | git stash save 696 | ``` 697 | 698 | ### Спрятать текущие изменения, включая неотслеживаемые файлы 699 | ```sh 700 | git stash -u 701 | ``` 702 | 703 | __Alternatives:__ 704 | ```sh 705 | git stash --include-untracked 706 | ``` 707 | 708 | ### Спрятать текущие изменения за исключением файлов в индексе 709 | ```sh 710 | git stash --keep-index 711 | ``` 712 | 713 | ### Спрятать только часть файла (файлов) 714 | Позволяет выбрать изменения, которые необходимо скрыть 715 | ```sh 716 | git stash -p 717 | ``` 718 | 719 | ### Показать список спрятанных изменений 720 | ```sh 721 | git stash list 722 | ``` 723 | 724 | ### Применить последние спрятанные изменения и удалить их из стека 725 | ```sh 726 | git stash pop 727 | ``` 728 | 729 | __Alternatives:__ 730 | ```sh 731 | git stash apply stash@{0} && git stash drop stash@{0} 732 | ``` 733 | 734 | ### Применить последние спрятанные изменения без удаления их из стека 735 | ```sh 736 | git stash apply 737 | ``` 738 | 739 | ### Извлечь отдельный файл из stash 740 | ```sh 741 | git checkout -- 742 | ``` 743 | 744 | __Alternatives:__ 745 | ```sh 746 | git checkout stash@{0} -- 747 | ``` 748 | 749 | ### Очистить stash 750 | ```sh 751 | git stash clear 752 | ``` 753 | 754 | __Alternatives:__ 755 | ```sh 756 | git stash drop 757 | ``` 758 | 759 | ## Tags 760 | 761 | ### Создать новый тег 762 | ```sh 763 | git tag 764 | ``` 765 | 766 | ### Отправить теги на удаленный репозиторий 767 | ```sh 768 | git push --tags 769 | ``` 770 | 771 | ### Удалить тег в локальном репозитории 772 | ```sh 773 | git tag -d 774 | ``` 775 | 776 | ### Удалить тег в удаленном репозитории 777 | ```sh 778 | git push origin :refs/tags/ 779 | ``` 780 | 781 | __Alternatives:__ 782 | ```sh 783 | git push origin : 784 | ``` 785 | 786 | ```sh 787 | git push -d origin 788 | ``` 789 | 790 | ## Разное 791 | 792 | ### Everyday Git in twenty commands or so 793 | ```sh 794 | git help everyday 795 | ``` 796 | 797 | ### Show helpful guides that come with Git 798 | ```sh 799 | git help -g 800 | ``` 801 | 802 | ### Клонировать отдельную ветку 803 | ```sh 804 | git clone -b --single-branch https://github.com/user/repo.git 805 | ``` 806 | 807 | ### Клонировать репозиторий с указаным количеством коммитов 808 | ```sh 809 | git clone https://github.com/user/repo.git --depth 1 810 | ``` 811 | 812 | ### Импортировать пакет в репозиторий 813 | ```sh 814 | git clone repo.bundle -b 815 | ``` 816 | 817 | ### Alias: git undo 818 | ```sh 819 | git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f' 820 | ``` 821 | 822 | ### Получить данные из удаленного репозитория и сбросить состояние текущей ветки к ним 823 | ```sh 824 | git fetch --all && git reset --hard origin/master 825 | ``` 826 | 827 | ### Prunes references to remote branches that have been deleted in the remote 828 | ```sh 829 | git fetch -p 830 | ``` 831 | 832 | __Alternatives:__ 833 | ```sh 834 | git remote prune origin 835 | ``` 836 | 837 | ### Загрузить пулл-реквест в текущую ветку по ID 838 | ```sh 839 | git fetch origin pull//head: 840 | ``` 841 | 842 | __Alternatives:__ 843 | ```sh 844 | git pull origin pull//head: 845 | ``` 846 | 847 | ### Specific fetch reference 848 | ```sh 849 | git fetch origin master:refs/remotes/origin/mymaster 850 | ``` 851 | 852 | ### List of all files till a commit 853 | ```sh 854 | git ls-tree --name-only -r 855 | ``` 856 | 857 | ### Git reset first commit 858 | ```sh 859 | git update-ref -d HEAD 860 | ``` 861 | 862 | ### Показать самый последний тег на текущей ветке 863 | ```sh 864 | git describe --tags --abbrev=0 865 | ``` 866 | 867 | ### Revert: отменить коммит с помощью нового коммита 868 | ```sh 869 | git revert 870 | ``` 871 | 872 | ### Revert: отменить слияние (merge) с помощью нового коммита 873 | ```sh 874 | git revert -m 1 875 | ``` 876 | 877 | ### Reset: Отменить коммиты (сброс к указанному коммиту) 878 | ```sh 879 | git reset 880 | ``` 881 | 882 | ### Показать историю коммитов только для текущей ветки 883 | ```sh 884 | git cherry -v master 885 | ``` 886 | 887 | ### Показать список удаленных репозиториев 888 | ```sh 889 | git remote 890 | ``` 891 | 892 | __Alternatives:__ 893 | ```sh 894 | git remote show 895 | ``` 896 | 897 | ### Изменить URL удаленного репозитория 898 | ```sh 899 | git remote set-url origin 900 | ``` 901 | 902 | ### List references in a remote repository 903 | ```sh 904 | git ls-remote git://git.kernel.org/pub/scm/git/git.git 905 | ``` 906 | 907 | ### Добавить удаленный репозиторий 908 | ```sh 909 | git remote add 910 | ``` 911 | 912 | ### Автокомплит Git-команд в bash 913 | ```sh 914 | curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc 915 | ``` 916 | 917 | ### Перенести коммиты из одной ветки в другую с помощью cherry-pick 918 | ```sh 919 | git checkout && git cherry-pick 920 | ``` 921 | 922 | ### Undo local changes with the last content in head 923 | ```sh 924 | git checkout -- 925 | ``` 926 | 927 | ### Показать все отслеживаемы файлы 928 | ```sh 929 | git ls-files -t 930 | ``` 931 | 932 | ### Показать все неотслеживаемые файлы 933 | ```sh 934 | git ls-files --others 935 | ``` 936 | 937 | ### Показать все игнорируемые файлы 938 | ```sh 939 | git ls-files --others -i --exclude-standard 940 | ``` 941 | 942 | ### Create new working tree from a repository (git 2.5) 943 | ```sh 944 | git worktree add -b 945 | ``` 946 | 947 | ### Create new working tree from HEAD state 948 | ```sh 949 | git worktree add --detach HEAD 950 | ``` 951 | 952 | ### Не отслеживать файл (без удаления) 953 | Удаляет файл из git, сохраняя при этом его локальную копию 954 | ```sh 955 | git rm --cached 956 | ``` 957 | 958 | __Alternatives:__ 959 | ```sh 960 | git rm --cached -r 961 | ``` 962 | 963 | ### Обновить все субмодули 964 | ```sh 965 | git submodule foreach git pull 966 | ``` 967 | 968 | __Alternatives:__ 969 | ```sh 970 | git submodule update --init --recursive 971 | ``` 972 | 973 | ```sh 974 | git submodule update --remote 975 | ``` 976 | 977 | ### Показать коммиты текущей ветки, которые будут слиты в мастер 978 | ```sh 979 | git cherry -v master 980 | ``` 981 | 982 | __Alternatives:__ 983 | ```sh 984 | git cherry -v master 985 | ``` 986 | 987 | ### Retrieve the commit hash of the initial revision 988 | ```sh 989 | git rev-list --reverse HEAD | head -1 990 | ``` 991 | 992 | __Alternatives:__ 993 | ```sh 994 | git rev-list --max-parents=0 HEAD 995 | ``` 996 | 997 | ```sh 998 | git log --pretty=oneline | tail -1 | cut -c 1-40 999 | ``` 1000 | 1001 | ```sh 1002 | git log --pretty=oneline --reverse | head -1 | cut -c 1-40 1003 | ``` 1004 | 1005 | ### Deploying git tracked subfolder to gh-pages 1006 | ```sh 1007 | git subtree push --prefix subfolder_name origin gh-pages 1008 | ``` 1009 | 1010 | ### Adding a project to repo using subtree 1011 | ```sh 1012 | git subtree add --prefix=/ --squash git@github.com:/.git master 1013 | ``` 1014 | 1015 | ### Get latest changes in your repo for a linked project using subtree 1016 | ```sh 1017 | git subtree pull --prefix=/ --squash git@github.com:/.git master 1018 | ``` 1019 | 1020 | ### Экспортировать ветку в файл (создать пакет) 1021 | ```sh 1022 | git bundle create 1023 | ``` 1024 | 1025 | ### Архивировать ветку master 1026 | ```sh 1027 | git archive master --format=zip --output=master.zip 1028 | ``` 1029 | 1030 | ### Ignore one file on commit (e.g. Changelog) 1031 | ```sh 1032 | git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog 1033 | ``` 1034 | 1035 | ### Спрятать изменения перед выполнением перемещения 1036 | ```sh 1037 | git rebase --autostash 1038 | ``` 1039 | 1040 | ### Show changes using common diff tools 1041 | ```sh 1042 | git difftool -t 1043 | ``` 1044 | 1045 | ### Don’t consider changes for tracked file 1046 | ```sh 1047 | git update-index --assume-unchanged 1048 | ``` 1049 | 1050 | ### Undo assume-unchanged 1051 | ```sh 1052 | git update-index --no-assume-unchanged 1053 | ``` 1054 | 1055 | ### Восстановить удаленный файл 1056 | ```sh 1057 | git checkout ^ -- 1058 | ``` 1059 | 1060 | ### Restore file to a specific commit-hash 1061 | ```sh 1062 | git checkout -- 1063 | ``` 1064 | 1065 | ### Check if the change was a part of a release 1066 | ```sh 1067 | git name-rev --name-only 1068 | ``` 1069 | 1070 | ### Squash fixup commits normal commits 1071 | ```sh 1072 | git rebase -i --autosquash 1073 | ``` 1074 | 1075 | ### Показать список игнорируемых файлов 1076 | ```sh 1077 | git check-ignore * 1078 | ``` 1079 | 1080 | ### Статус игнорируемых файлов 1081 | ```sh 1082 | git status --ignored 1083 | ``` 1084 | 1085 | ### Count unpacked number of objects and their disk consumption 1086 | ```sh 1087 | git count-objects --human-readable 1088 | ``` 1089 | 1090 | ### Prune all unreachable objects from the object database 1091 | ```sh 1092 | git gc --prune=now --aggressive 1093 | ``` 1094 | 1095 | ### Instantly browse your working repository in gitweb 1096 | ```sh 1097 | git instaweb [--local] [--httpd=] [--port=] [--browser=] 1098 | ``` 1099 | 1100 | ### Получить файл из другой ветки 1101 | ```sh 1102 | git show : 1103 | ``` 1104 | 1105 | ### Изменить коммиты в интерактивном режиме 1106 | ```sh 1107 | git rebase --interactive HEAD~2 1108 | ``` 1109 | 1110 | ### Поиск коммита с багом при помощи бинарного поиска 1111 | ```sh 1112 | git bisect start # Search start 1113 | git bisect bad # Set point to bad commit 1114 | git bisect good v2.6.13-rc2 # Set point to good commit|tag 1115 | git bisect bad # Say current state is bad 1116 | git bisect good # Say current state is good 1117 | git bisect reset # Finish search 1118 | 1119 | ``` 1120 | 1121 | ### Показать все локальные ветки, отсортировав их по дате изменения 1122 | ```sh 1123 | git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ 1124 | ``` 1125 | 1126 | ### Find lines matching the pattern (regex or string) in tracked files 1127 | ```sh 1128 | git grep --heading --line-number 'foo bar' 1129 | ``` 1130 | 1131 | ### Количество коммитов в ветке 1132 | ```sh 1133 | git rev-list --count 1134 | ``` 1135 | 1136 | ### Добавить заметку 1137 | ```sh 1138 | git notes add -m 'Note on the previous commit....' 1139 | ``` 1140 | 1141 | ### Apply commit from another repository 1142 | ```sh 1143 | git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k 1144 | ``` 1145 | 1146 | ### Найти общего предка двух веток 1147 | ```sh 1148 | diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1 1149 | ``` 1150 | 1151 | ### Показывает автора, время и хеш-коммита последнего изменения для каждой строки файла 1152 | Также можно выполнить команду с флагом `-s` для того, чтобы показывать автора и время коммита 1153 | ```sh 1154 | git blame 1155 | ``` 1156 | 1157 | ### Показывает автора, время и хеш-коммита последнего изменения для указанного диапазона строк 1158 | ```sh 1159 | git blame -L , 1160 | ``` 1161 | 1162 | ### Show a Git logical variable 1163 | ```sh 1164 | git var -l | 1165 | ``` 1166 | 1167 | ### Preformatted patch file 1168 | ```sh 1169 | git format-patch -M upstream..topic 1170 | ``` 1171 | 1172 | ### Показать название репозитория 1173 | ```sh 1174 | git rev-parse --show-toplevel 1175 | ``` 1176 | 1177 | ### Generates a summary of pending changes 1178 | ```sh 1179 | git request-pull v1.0 https://git.ko.xz/project master:for-linus 1180 | ``` 1181 | 1182 | ### Сделать резервную копию неотслеживаемых файлов 1183 | ```sh 1184 | git ls-files --others -i --exclude-standard | xargs zip untracked.zip 1185 | ``` 1186 | 1187 | 1188 | --------------------------------------------------------------------------------