{"id":13677782,"url":"https://github.com/Imangazaliev/git-tips","last_synced_at":"2025-04-29T12:31:45.039Z","repository":{"id":50576526,"uuid":"81833578","full_name":"Imangazaliev/git-tips","owner":"Imangazaliev","description":"Часто используемые трюки и советы при работе с Git","archived":false,"fork":false,"pushed_at":"2022-10-05T09:44:43.000Z","size":112,"stargazers_count":620,"open_issues_count":1,"forks_count":157,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-11-07T09:40:40.194Z","etag":null,"topics":["git","git-cheatsheet","git-tips","tips"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Imangazaliev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-13T14:28:05.000Z","updated_at":"2024-11-06T18:06:29.000Z","dependencies_parsed_at":"2023-01-19T06:30:48.527Z","dependency_job_id":null,"html_url":"https://github.com/Imangazaliev/git-tips","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imangazaliev%2Fgit-tips","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imangazaliev%2Fgit-tips/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imangazaliev%2Fgit-tips/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imangazaliev%2Fgit-tips/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Imangazaliev","download_url":"https://codeload.github.com/Imangazaliev/git-tips/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224173117,"owners_count":17268050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","git-cheatsheet","git-tips","tips"],"created_at":"2024-08-02T13:00:46.927Z","updated_at":"2024-11-11T20:30:18.627Z","avatar_url":"https://github.com/Imangazaliev.png","language":"JavaScript","readme":"# Git Tips\n\nЧасто используемые трюки и советы при работе с Git.\n\nХотите дополнить список? Ознакомьтесь с [CONTRIBUTING.md](CONTRIBUTING.md)\n\n[English](http://git.io/git-tips) | [中文](https://github.com/521xueweihan/git-tips) | [Русский](https://github.com/Imangazaliev/git-tips)\n\n### Tools:\n\n* [git-tip](https://www.npmjs.com/package/git-tip) - консольная утилита, облегчающая использование всех этих команд. Docker-контейнер можно найти [здесь](https://github.com/djoudi5/docker-git-tip)\n\n**P.S:** Все эти команды были проверены в `git version 2.7.4 (Apple Git-66)`\n\n\u003c!-- @doxie.inject start toc --\u003e\n\u003c!-- Don’t remove or change the comment above – that can break automatic updates. --\u003e\n### Branch\n\n- [Создать новую ветку и переключиться на нее](#Создать-новую-ветку-и-переключиться-на-нее)\n- [Создать новую ветку без родительской ветки](#Создать-новую-ветку-без-родительской-ветки)\n- [Быстрое переключение на предыдущую ветку](#Быстрое-переключение-на-предыдущую-ветку)\n- [Список локальных и удаленных веток](#Список-локальных-и-удаленных-веток)\n- [Список веток в удаленном репозитории](#Список-веток-в-удаленном-репозитории)\n- [Показать все ветки (в том числе и удаленные ветки), а так же последний коммит в них](#Показать-все-ветки-в-том-числе-и-удаленные-ветки-а-так-же-последний-коммит-в-них)\n- [Переименовать ветку](#Переименовать-ветку)\n- [Удалить локальную ветку](#Удалить-локальную-ветку)\n- [Удалить ветку в удаленном репозитории](#Удалить-ветку-в-удаленном-репозитории)\n- [Показать название текущей ветки](#Показать-название-текущей-ветки)\n- [Показать все ветки, не слитые в master](#Показать-все-ветки-не-слитые-в-master)\n- [Показать список веток, которые уже слиты с веткой master](#Показать-список-веток-которые-уже-слиты-с-веткой-master)\n- [Переместить ветку feature на master и слить ее в мастер](#Переместить-ветку-feature-на-master-и-слить-ее-в-мастер)\n- [Удалить ветки, которые уже слиты с master](#Удалить-ветки-которые-уже-слиты-с-master)\n- [Найти ветки, которые содержат коммит с указанным хешем](#Найти-ветки-которые-содержат-коммит-с-указанным-хешем)\n- [Track upstream branch](#track-upstream-branch)\n\n### Clean\n\n- [Принудительно удалить неотслеживаемые файлы](#Принудительно-удалить-неотслеживаемые-файлы)\n- [Принудительно удалить неотслеживаемые файлы и директории](#Принудительно-удалить-неотслеживаемые-файлы-и-директории)\n- [Удалить все файлы, которые находятся в `.gitignore`](#Удалить-все-файлы-которые-находятся-в-gitignore)\n- [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)\n- [Dry run (any command that supports dry-run flag should do)](#dry-run-any-command-that-supports-dry-run-flag-should-do)\n\n### Commit\n\n- [Изменить сообщение последнего коммита](#Изменить-сообщение-последнего-коммита)\n- [Изменить предыдущий коммит без изменения сообщения к коммиту](#Изменить-предыдущий-коммит-без-изменения-сообщения-к-коммиту)\n- [Исправить имя автора последнего коммита](#Исправить-имя-автора-последнего-коммита)\n- [Reset author, after author has been changed in the global config](#reset-author-after-author-has-been-changed-in-the-global-config)\n- [Создать коммит только с указанными файлами](#Создать-коммит-только-с-указанными-файлами)\n- [Сделать коммит, обойдя хуки pre-commit и commit-msg](#Сделать-коммит-обойдя-хуки-pre-commit-и-commit-msg)\n- [Отметить коммит как исправление к указанному коммиту](#Отметить-коммит-как-исправление-к-указанному-коммиту)\n\n### Config\n\n- [Показать конфиг и все псевдонимы (alias)](#Показать-конфиг-и-все-псевдонимы-alias)\n- [Изменить локальный/глобальный конфиг git](#Изменить-локальныйглобальный-конфиг-git)\n- [Изменить текстовый редактор](#Изменить-текстовый-редактор)\n- [Игнорировать изменения прав доступа к файлам при коммите](#Игнорировать-изменения-прав-доступа-к-файлам-при-коммите)\n- [Сделать git чувствительным к регистру](#Сделать-git-чувствительным-к-регистру)\n- [Включить автоматическое исправление опечаток](#Включить-автоматическое-исправление-опечаток)\n- [Отключить цветной вывод Git](#Отключить-цветной-вывод-git)\n- [Specific color settings](#specific-color-settings)\n- [Удалить запись из глобального конфига](#Удалить-запись-из-глобального-конфига)\n- [Reuse recorded resolution, record and reuse previous conflicts resolutions](#reuse-recorded-resolution-record-and-reuse-previous-conflicts-resolutions)\n- [Всегда выполнять перемещение вместо слияния при получении изменений из удаленного репозитория](#Всегда-выполнять-перемещение-вместо-слияния-при-получении-изменений-из-удаленного-репозитория)\n- [Псевдонимы (alias) для команд Git](#Псевдонимы-alias-для-команд-git)\n\n### Diff\n\n- [Показать изменения с момента последнего коммита](#Показать-изменения-с-момента-последнего-коммита)\n- [Показать все изменения (для файлов которых нет в индексе и которые уже там)](#Показать-все-изменения-для-файлов-которых-нет-в-индексе-и-которые-уже-там)\n- [Изменения в файлах, которые находятся в индексе](#Изменения-в-файлах-которые-находятся-в-индексе)\n- [Показывать изменения в одну строку](#Показывать-изменения-в-одну-строку)\n- [Показать список конфликтующих файлов](#Показать-список-конфликтующих-файлов)\n- [Открыть все конфликтующие файлы в редакторе](#Открыть-все-конфликтующие-файлы-в-редакторе)\n- [Список всех файлов, которые были изменены в коммите](#Список-всех-файлов-которые-были-изменены-в-коммите)\n\n### Index\n\n- [Интерактивное добавление файлов в индекс](#Интерактивное-добавление-файлов-в-индекс)\n- [Добавить в индекс часть файла](#Добавить-в-индекс-часть-файла)\n- [Удалить файл из индекса](#Удалить-файл-из-индекса)\n- [Удалить все файлы из индекса](#Удалить-все-файлы-из-индекса)\n\n### Log\n\n- [Показать логи за определенный период (от-до)](#Показать-логи-за-определенный-период-от-до)\n- [Показать коммиты за указанный промежуток времени](#Показать-коммиты-за-указанный-промежуток-времени)\n- [Показать историю коммитов, сгрупировав их по имени автора](#Показать-историю-коммитов-сгрупировав-их-по-имени-автора)\n- [Показать историю коммитов, исключив коммиты указанного автора](#Показать-историю-коммитов-исключив-коммиты-указанного-автора)\n- [Показать коммиты и изменения в них для определенного файла (даже если он был переименован)](#Показать-коммиты-и-изменения-в-них-для-определенного-файла-даже-если-он-был-переименован)\n- [List only the root and merge commits](#list-only-the-root-and-merge-commits)\n- [Показать незапушенные коммиты](#Показать-незапушенные-коммиты)\n- [Показать все коммиты с момента отделения от ветки master](#Показать-все-коммиты-с-момента-отделения-от-ветки-master)\n- [Коммиты в ветке branch-1, которых нет в branch-2](#Коммиты-в-ветке-branch-1-которых-нет-в-branch-2)\n- [Показать GPG-сигнатуру в истории коммитов](#Показать-gpg-сигнатуру-в-истории-коммитов)\n- [Показать количество строк, которое добавил/удалил пользователь](#Показать-количество-строк-которое-добавилудалил-пользователь)\n- [Поиск в истории коммитов по регулярному выражению](#Поиск-в-истории-коммитов-по-регулярному-выражению)\n- [Показать все заметки (git notes)](#Показать-все-заметки-git-notes)\n- [Показать дерево тегов (версий)](#Показать-дерево-тегов-версий)\n- [Get first commit in a branch (from master)](#get-first-commit-in-a-branch-from-master)\n\n### Merge\n\n- [Слить ветку feature с master, объединив все коммиты ветки feature в один](#Слить-ветку-feature-с-master-объединив-все-коммиты-ветки-feature-в-один)\n\n### Push\n\n- [Отправить коммиты в удаленный репозиторий, перезаписав историю (force push)](#Отправить-коммиты-в-удаленный-репозиторий-перезаписав-историю-force-push)\n- [Отправить коммиты в удаленный репозиторий с проверкой, что вы не затираете чужие коммиты](#Отправить-коммиты-в-удаленный-репозиторий-с-проверкой-что-вы-не-затираете-чужие-коммиты)\n- [Автоматически устанавливать remote для ветки при пуше](#Автоматически-устанавливать-remote-для-ветки-при-пуше)\n\n### Show\n\n- [Показать изменения в коммите](#Показать-изменения-в-коммите)\n- [Показать изменения в коммите (по хешу)](#Показать-изменения-в-коммите-по-хешу)\n\n### Stash\n\n- [Спрятать текущие изменения для отслеживаемых файлов](#Спрятать-текущие-изменения-для-отслеживаемых-файлов)\n- [Спрятать текущие изменения, включая неотслеживаемые файлы](#Спрятать-текущие-изменения-включая-неотслеживаемые-файлы)\n- [Спрятать текущие изменения за исключением файлов в индексе](#Спрятать-текущие-изменения-за-исключением-файлов-в-индексе)\n- [Спрятать только часть файла (файлов)](#Спрятать-только-часть-файла-файлов)\n- [Показать список спрятанных изменений](#Показать-список-спрятанных-изменений)\n- [Применить последние спрятанные изменения и удалить их из стека](#Применить-последние-спрятанные-изменения-и-удалить-их-из-стека)\n- [Применить последние спрятанные изменения без удаления их из стека](#Применить-последние-спрятанные-изменения-без-удаления-их-из-стека)\n- [Извлечь отдельный файл из stash](#Извлечь-отдельный-файл-из-stash)\n- [Очистить stash](#Очистить-stash)\n\n### Tags\n\n- [Создать новый тег](#Создать-новый-тег)\n- [Отправить теги на удаленный репозиторий](#Отправить-теги-на-удаленный-репозиторий)\n- [Удалить тег в локальном репозитории](#Удалить-тег-в-локальном-репозитории)\n- [Удалить тег в удаленном репозитории](#Удалить-тег-в-удаленном-репозитории)\n\n### Разное\n\n- [Everyday Git in twenty commands or so](#everyday-git-in-twenty-commands-or-so)\n- [Show helpful guides that come with Git](#show-helpful-guides-that-come-with-git)\n- [Клонировать отдельную ветку](#Клонировать-отдельную-ветку)\n- [Клонировать репозиторий с указаным количеством коммитов](#Клонировать-репозиторий-с-указаным-количеством-коммитов)\n- [Импортировать пакет в репозиторий](#Импортировать-пакет-в-репозиторий)\n- [Alias: git undo](#alias-git-undo)\n- [Получить данные из удаленного репозитория и сбросить состояние текущей ветки к ним](#Получить-данные-из-удаленного-репозитория-и-сбросить-состояние-текущей-ветки-к-ним)\n- [Prunes references to remote branches that have been deleted in the remote](#prunes-references-to-remote-branches-that-have-been-deleted-in-the-remote)\n- [Загрузить пулл-реквест в текущую ветку по ID](#Загрузить-пулл-реквест-в-текущую-ветку-по-id)\n- [Specific fetch reference](#specific-fetch-reference)\n- [List of all files till a commit](#list-of-all-files-till-a-commit)\n- [Git reset first commit](#git-reset-first-commit)\n- [Показать самый последний тег на текущей ветке](#Показать-самый-последний-тег-на-текущей-ветке)\n- [Revert: отменить коммит с помощью нового коммита](#revert-отменить-коммит-с-помощью-нового-коммита)\n- [Revert: отменить слияние (merge) с помощью нового коммита](#revert-отменить-слияние-merge-с-помощью-нового-коммита)\n- [Reset: Отменить коммиты (сброс к указанному коммиту)](#reset-Отменить-коммиты-сброс-к-указанному-коммиту)\n- [Показать историю коммитов только для текущей ветки](#Показать-историю-коммитов-только-для-текущей-ветки)\n- [Показать список удаленных репозиториев](#Показать-список-удаленных-репозиториев)\n- [Изменить URL удаленного репозитория](#Изменить-url-удаленного-репозитория)\n- [List references in a remote repository](#list-references-in-a-remote-repository)\n- [Добавить удаленный репозиторий](#Добавить-удаленный-репозиторий)\n- [Автокомплит Git-команд в bash](#Автокомплит-git-команд-в-bash)\n- [Перенести коммиты из одной ветки в другую с помощью cherry-pick](#Перенести-коммиты-из-одной-ветки-в-другую-с-помощью-cherry-pick)\n- [Undo local changes with the last content in head](#undo-local-changes-with-the-last-content-in-head)\n- [Показать все отслеживаемы файлы](#Показать-все-отслеживаемы-файлы)\n- [Показать все неотслеживаемые файлы](#Показать-все-неотслеживаемые-файлы)\n- [Показать все игнорируемые файлы](#Показать-все-игнорируемые-файлы)\n- [Create new working tree from a repository (git 2.5)](#create-new-working-tree-from-a-repository-git-25)\n- [Create new working tree from HEAD state](#create-new-working-tree-from-head-state)\n- [Не отслеживать файл (без удаления)](#Не-отслеживать-файл-без-удаления)\n- [Обновить все субмодули](#Обновить-все-субмодули)\n- [Показать коммиты текущей ветки, которые будут слиты в мастер](#Показать-коммиты-текущей-ветки-которые-будут-слиты-в-мастер)\n- [Retrieve the commit hash of the initial revision](#retrieve-the-commit-hash-of-the-initial-revision)\n- [Deploying git tracked subfolder to gh-pages](#deploying-git-tracked-subfolder-to-gh-pages)\n- [Adding a project to repo using subtree](#adding-a-project-to-repo-using-subtree)\n- [Get latest changes in your repo for a linked project using subtree](#get-latest-changes-in-your-repo-for-a-linked-project-using-subtree)\n- [Экспортировать ветку в файл (создать пакет)](#Экспортировать-ветку-в-файл-создать-пакет)\n- [Архивировать ветку master](#Архивировать-ветку-master)\n- [Ignore one file on commit (e.g. Changelog)](#ignore-one-file-on-commit-eg-changelog)\n- [Спрятать изменения перед выполнением перемещения](#Спрятать-изменения-перед-выполнением-перемещения)\n- [Show changes using common diff tools](#show-changes-using-common-diff-tools)\n- [Don’t consider changes for tracked file](#dont-consider-changes-for-tracked-file)\n- [Undo assume-unchanged](#undo-assume-unchanged)\n- [Восстановить удаленный файл](#Восстановить-удаленный-файл)\n- [Restore file to a specific commit-hash](#restore-file-to-a-specific-commit-hash)\n- [Check if the change was a part of a release](#check-if-the-change-was-a-part-of-a-release)\n- [Squash fixup commits normal commits](#squash-fixup-commits-normal-commits)\n- [Показать список игнорируемых файлов](#Показать-список-игнорируемых-файлов)\n- [Статус игнорируемых файлов](#Статус-игнорируемых-файлов)\n- [Count unpacked number of objects and their disk consumption](#count-unpacked-number-of-objects-and-their-disk-consumption)\n- [Prune all unreachable objects from the object database](#prune-all-unreachable-objects-from-the-object-database)\n- [Instantly browse your working repository in gitweb](#instantly-browse-your-working-repository-in-gitweb)\n- [Получить файл из другой ветки](#Получить-файл-из-другой-ветки)\n- [Изменить коммиты в интерактивном режиме](#Изменить-коммиты-в-интерактивном-режиме)\n- [Поиск коммита с багом при помощи бинарного поиска](#Поиск-коммита-с-багом-при-помощи-бинарного-поиска)\n- [Показать все локальные ветки, отсортировав их по дате изменения](#Показать-все-локальные-ветки-отсортировав-их-по-дате-изменения)\n- [Find lines matching the pattern (regex or string) in tracked files](#find-lines-matching-the-pattern-regex-or-string-in-tracked-files)\n- [Количество коммитов в ветке](#Количество-коммитов-в-ветке)\n- [Добавить заметку](#Добавить-заметку)\n- [Apply commit from another repository](#apply-commit-from-another-repository)\n- [Найти общего предка двух веток](#Найти-общего-предка-двух-веток)\n- [Показывает автора, время и хеш-коммита последнего изменения для каждой строки файла](#Показывает-автора-время-и-хеш-коммита-последнего-изменения-для-каждой-строки-файла)\n- [Показывает автора, время и хеш-коммита последнего изменения для указанного диапазона строк](#Показывает-автора-время-и-хеш-коммита-последнего-изменения-для-указанного-диапазона-строк)\n- [Show a Git logical variable](#show-a-git-logical-variable)\n- [Preformatted patch file](#preformatted-patch-file)\n- [Показать название репозитория](#Показать-название-репозитория)\n- [Generates a summary of pending changes](#generates-a-summary-of-pending-changes)\n- [Сделать резервную копию неотслеживаемых файлов](#Сделать-резервную-копию-неотслеживаемых-файлов)\n\n\n\u003c!-- Don’t remove or change the comment below – that can break automatic updates. More info at \u003chttp://npm.im/doxie.inject\u003e. --\u003e\n\u003c!-- @doxie.inject end toc --\u003e\n\n\n\u003c!-- @doxie.inject start --\u003e\n\u003c!-- Don’t remove or change the comment above – that can break automatic updates. --\u003e\n\n## Branch\n\n### Создать новую ветку и переключиться на нее\n```sh\ngit checkout -b \u003cbranch-name\u003e\n```\n\n__Alternatives:__\n```sh\ngit branch \u003cbranch-name\u003e \u0026\u0026 git checkout \u003cbranch-name\u003e\n```\n\n### Создать новую ветку без родительской ветки\n```sh\ngit checkout --orphan \u003cbranch-name\u003e\n```\n\n### Быстрое переключение на предыдущую ветку\n```sh\ngit checkout -\n```\n\n### Список локальных и удаленных веток\n```sh\ngit branch -a\n```\n\n### Список веток в удаленном репозитории\n```sh\ngit branch -r\n```\n\n### Показать все ветки (в том числе и удаленные ветки), а так же последний коммит в них\n```sh\ngit branch -vv\n```\n\n### Переименовать ветку\n```sh\ngit branch -m \u003cnew-branch-name\u003e\n```\n\n__Alternatives:__\n```sh\ngit branch -m [\u003cold-branch-name\u003e] \u003cnew-branch-name\u003e\n```\n\n### Удалить локальную ветку\n```sh\ngit branch -d \u003clocal-branch-name\u003e\n```\n\n### Удалить ветку в удаленном репозитории\n```sh\ngit push origin --delete \u003cremote-branch-name\u003e\n```\n\n__Alternatives:__\n```sh\ngit push origin :\u003cremote-branch-name\u003e\n```\n\n### Показать название текущей ветки\n```sh\ngit rev-parse --abbrev-ref HEAD\n```\n\n### Показать все ветки, не слитые в master\n```sh\ngit checkout master \u0026\u0026 git branch --no-merged\n```\n\n### Показать список веток, которые уже слиты с веткой master\n```sh\ngit branch --merged master\n```\n\n### Переместить ветку feature на master и слить ее в мастер\n```sh\ngit rebase master feature \u0026\u0026 git checkout master \u0026\u0026 git merge -\n```\n\n### Удалить ветки, которые уже слиты с master\n```sh\ngit branch --merged master | grep -v '^\\*' | xargs -n 1 git branch -d\n```\n\n__Alternatives:__\n```sh\ngit branch --merged master | grep -v '^\\*\\|  master' | xargs -n 1 git branch -d # will not delete master if master is not checked out\n```\n\n### Найти ветки, которые содержат коммит с указанным хешем\n```sh\ngit branch -a --contains \u003ccommit-ish\u003e\n```\n\n__Alternatives:__\n```sh\ngit branch --contains \u003ccommit-ish\u003e\n```\n\n### Track upstream branch\n```sh\ngit branch -u origin/mybranch\n```\n\n## Clean\n\n### Принудительно удалить неотслеживаемые файлы\n```sh\ngit clean -f\n```\n\n### Принудительно удалить неотслеживаемые файлы и директории\n```sh\ngit clean -f -d\n```\n\n__Alternatives:__\n```sh\ngit clean -df\n```\n\n### Удалить все файлы, которые находятся в `.gitignore`\n```sh\ngit clean -X -f\n```\n\n### Before deleting untracked files/directory, do a dry run to get the list of these files/directories\n```sh\ngit clean -n\n```\n\n### Dry run (any command that supports dry-run flag should do)\n```sh\ngit clean -fd --dry-run\n```\n\n## Commit\n\n### Изменить сообщение последнего коммита\nПри выполнении команды откроется редактор, указанный в настройках git. Необходимо изменить текст сообщения, сохранить файл и закрыть редактор.\n\nСообщение можно указать и непосредственно при вызове команды с помощью опции `-m` (`--message`)\n```sh\ngit commit --amend\n\n# можно указать сообщение с помощью опции -m\ngit commit --amend -m \"New message\"\n```\n\n### Изменить предыдущий коммит без изменения сообщения к коммиту\n```sh\ngit commit --amend --no-edit\n```\n\n### Исправить имя автора последнего коммита\n```sh\ngit commit --amend --no-edit --author='Author Name \u003cemail@address.com\u003e'\n```\n\n### Reset author, after author has been changed in the global config\n```sh\ngit commit --amend --reset-author --no-edit\n```\n\n### Создать коммит только с указанными файлами\n```sh\ngit commit --only \u003cfile_path\u003e\n```\n\n### Сделать коммит, обойдя хуки pre-commit и commit-msg\n```sh\ngit commit --no-verify\n```\n\n__Alternatives:__\n```sh\ngit commit -n\n```\n\n### Отметить коммит как исправление к указанному коммиту\n```sh\ngit commit --fixup \u003cSHA-1\u003e\n```\n\n## Config\n\n### Показать конфиг и все псевдонимы (alias)\n```sh\ngit config --list\n```\n\n### Изменить локальный/глобальный конфиг git\n```sh\ngit config [--global] --edit\n```\n\n### Изменить текстовый редактор\n```sh\ngit config --global core.editor '$EDITOR'\n```\n\n### Игнорировать изменения прав доступа к файлам при коммите\n```sh\ngit config core.fileMode false\n```\n\n### Сделать git чувствительным к регистру\n```sh\ngit config --global core.ignorecase false\n```\n\n### Включить автоматическое исправление опечаток\n```sh\ngit config --global help.autocorrect 1\n```\n\n### Отключить цветной вывод Git\n```sh\ngit config --global color.ui false\n```\n\n### Specific color settings\n```sh\ngit config --global \u003cspecific command e.g branch, diff\u003e \u003ctrue, false or always\u003e\n```\n\n### Удалить запись из глобального конфига\n```sh\ngit config --global --unset \u003centry-name\u003e\n```\n\n### Reuse recorded resolution, record and reuse previous conflicts resolutions\n```sh\ngit config --global rerere.enabled 1\n```\n\n### Всегда выполнять перемещение вместо слияния при получении изменений из удаленного репозитория\n```sh\ngit config --global pull.rebase true\n```\n\n__Alternatives:__\n```sh\n#git \u003c 1.7.9\ngit config --global branch.autosetuprebase always\n```\n\n### Псевдонимы (alias) для команд Git\n```sh\ngit config --global alias.\u003chandle\u003e \u003ccommand\u003e \ngit config --global alias.st status\n```\n\n## Diff\n\n### Показать изменения с момента последнего коммита\n```sh\ngit diff\n```\n\n### Показать все изменения (для файлов которых нет в индексе и которые уже там)\n```sh\ngit diff HEAD\n```\n\n### Изменения в файлах, которые находятся в индексе\n```sh\ngit diff --cached\n```\n\n__Alternatives:__\n```sh\ngit diff --staged\n```\n\n### Показывать изменения в одну строку\n```sh\ngit diff --word-diff\n```\n\n### Показать список конфликтующих файлов\n```sh\ngit diff --name-only --diff-filter=U\n```\n\n### Открыть все конфликтующие файлы в редакторе\n```sh\ngit diff --name-only | uniq | xargs $EDITOR\n```\n\n### Список всех файлов, которые были изменены в коммите\n```sh\ngit diff-tree --no-commit-id --name-only -r \u003ccommit-ish\u003e\n```\n\n## Index\n\n### Интерактивное добавление файлов в индекс\n```sh\ngit add -i\n```\n\n### Добавить в индекс часть файла\n```sh\ngit add -p\n```\n\n### Удалить файл из индекса\n```sh\ngit reset HEAD \u003cfile-name\u003e\n```\n\n### Удалить все файлы из индекса\n```sh\ngit reset HEAD\n```\n\n## Log\n\n### Показать логи за определенный период (от-до)\n```sh\ngit log --since='FEB 1 2017' --until='FEB 14 2017'\n```\n\n### Показать коммиты за указанный промежуток времени\n```sh\ngit log --no-merges --raw --since='2 weeks ago'\n```\n\n__Alternatives:__\n```sh\ngit whatchanged --since='2 weeks ago'\n```\n\n### Показать историю коммитов, сгрупировав их по имени автора\n```sh\ngit shortlog\n```\n\n### Показать историю коммитов, исключив коммиты указанного автора\n```sh\ngit log --perl-regexp --author='^((?!excluded-author-regex).*)\n\n```\n\n### Показать коммиты и изменения в них для определенного файла (даже если он был переименован)\n```sh\ngit log --follow -p -- \u003cfile_path\u003e\n```\n\n### List only the root and merge commits\n```sh\ngit log --first-parent\n```\n\n### Показать незапушенные коммиты\n```sh\ngit log --branches --not --remotes\n```\n\n__Alternatives:__\n```sh\ngit log @{u}..\n```\n\n```sh\ngit cherry -v\n```\n\n### Показать все коммиты с момента отделения от ветки master\n```sh\ngit log --no-merges --stat --reverse master..\n```\n\n### Коммиты в ветке branch-1, которых нет в branch-2\n```sh\ngit log branch-1 ^branch-2\n```\n\n### Показать GPG-сигнатуру в истории коммитов\n```sh\ngit log --show-signature\n```\n\n### Показать количество строк, которое добавил/удалил пользователь\n```sh\ngit log --author='Your Name Here' --pretty=tformat: --numstat | gawk '{ add += \u003c!-- @doxie.inject start --\u003e; subs += \u003c!-- @doxie.inject end --\u003e; loc += \u003c!-- @doxie.inject start --\u003e - \u003c!-- @doxie.inject end --\u003e } END { printf \"added lines: %s removed lines: %s total lines: %s\n\", add, subs, loc }' -\n```\n\n__Alternatives:__\n```sh\ngit log --author='Your Name Here' --pretty=tformat: --numstat | awk '{ add += \u003c!-- @doxie.inject start --\u003e; subs += \u003c!-- @doxie.inject end --\u003e; loc += \u003c!-- @doxie.inject start --\u003e - \u003c!-- @doxie.inject end --\u003e } END { printf \"added lines: %s, removed lines: %s, total lines: %s\n\", add, subs, loc }' - # on Mac OSX\n```\n\n### Поиск в истории коммитов по регулярному выражению\n```sh\ngit log --all --grep='\u003cgiven-text\u003e'\n```\n\n### Показать все заметки (git notes)\n```sh\ngit log --show-notes='*'\n```\n\n### Показать дерево тегов (версий)\n```sh\ngit log --pretty=oneline --graph --decorate --all\n```\n\n__Alternatives:__\n```sh\ngitk --all\n```\n\n### Get first commit in a branch (from master)\n```sh\ngit log master..\u003cbranch-name\u003e --oneline | tail -1\n```\n\n## Merge\n\n### Слить ветку feature с master, объединив все коммиты ветки feature в один\nПри этом коммит слияния не будет создан, вам нужно будет сделать его вручную.\n```sh\ngit merge feature --squash\n```\n\n## Push\n\n### Отправить коммиты в удаленный репозиторий, перезаписав историю (force push)\n```sh\ngit push --force\n```\n\n__Alternatives:__\n```sh\ngit push -f\n```\n\n### Отправить коммиты в удаленный репозиторий с проверкой, что вы не затираете чужие коммиты\n```sh\ngit push --force-with-lease \u003cremote-name\u003e \u003cbranch-name\u003e\n```\n\n### Автоматически устанавливать remote для ветки при пуше\n\n### \n```sh\ngit config --global push.autoSetupRemote true \n```\n\n## Show\n\n### Показать изменения в коммите\nТакже можно использовать `HEAD~1`, `HEAD~2` и т.д. для просмотра предыдущих коммитов.\n```sh\ngit show HEAD\n```\n\n### Показать изменения в коммите (по хешу)\n```sh\ngit show \u003ccommit-ish\u003e\n```\n\n## Stash\n\n### Спрятать текущие изменения для отслеживаемых файлов\n```sh\ngit stash\n```\n\n__Alternatives:__\n```sh\ngit stash save\n```\n\n### Спрятать текущие изменения, включая неотслеживаемые файлы\n```sh\ngit stash -u\n```\n\n__Alternatives:__\n```sh\ngit stash --include-untracked\n```\n\n### Спрятать текущие изменения за исключением файлов в индексе\n```sh\ngit stash --keep-index\n```\n\n### Спрятать только часть файла (файлов)\nПозволяет выбрать изменения, которые необходимо скрыть\n```sh\ngit stash -p\n```\n\n### Показать список спрятанных изменений\n```sh\ngit stash list\n```\n\n### Применить последние спрятанные изменения и удалить их из стека\n```sh\ngit stash pop\n```\n\n__Alternatives:__\n```sh\ngit stash apply stash@{0} \u0026\u0026 git stash drop stash@{0}\n```\n\n### Применить последние спрятанные изменения без удаления их из стека\n```sh\ngit stash apply \u003cstash@{n}\u003e\n```\n\n### Извлечь отдельный файл из stash\n```sh\ngit checkout \u003cstash@{n}\u003e -- \u003cfile_path\u003e\n```\n\n__Alternatives:__\n```sh\ngit checkout stash@{0} -- \u003cfile_path\u003e\n```\n\n### Очистить stash\n```sh\ngit stash clear\n```\n\n__Alternatives:__\n```sh\ngit stash drop \u003cstash@{n}\u003e\n```\n\n## Tags\n\n### Создать новый тег\n```sh\ngit tag \u003ctag-name\u003e\n```\n\n### Отправить теги на удаленный репозиторий\n```sh\ngit push --tags\n```\n\n### Удалить тег в локальном репозитории\n```sh\ngit tag -d \u003ctag-name\u003e\n```\n\n### Удалить тег в удаленном репозитории\n```sh\ngit push origin :refs/tags/\u003ctag-name\u003e\n```\n\n__Alternatives:__\n```sh\ngit push origin :\u003ctag-name\u003e\n```\n\n```sh\ngit push -d origin \u003ctag-name\u003e\n```\n\n## Разное\n\n### Everyday Git in twenty commands or so\n```sh\ngit help everyday\n```\n\n### Show helpful guides that come with Git\n```sh\ngit help -g\n```\n\n### Клонировать отдельную ветку\n```sh\ngit clone -b \u003cbranch-name\u003e --single-branch https://github.com/user/repo.git\n```\n\n### Клонировать репозиторий с указаным количеством коммитов\n```sh\ngit clone https://github.com/user/repo.git --depth 1\n```\n\n### Импортировать пакет в репозиторий\n```sh\ngit clone repo.bundle \u003crepo-dir\u003e -b \u003cbranch-name\u003e\n```\n\n### Alias: git undo\n```sh\ngit config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'\n```\n\n### Получить данные из удаленного репозитория и сбросить состояние текущей ветки к ним\n```sh\ngit fetch --all \u0026\u0026 git reset --hard origin/master\n```\n\n### Prunes references to remote branches that have been deleted in the remote\n```sh\ngit fetch -p\n```\n\n__Alternatives:__\n```sh\ngit remote prune origin\n```\n\n### Загрузить пулл-реквест в текущую ветку по ID\n```sh\ngit fetch origin pull/\u003cid\u003e/head:\u003cbranch-name\u003e\n```\n\n__Alternatives:__\n```sh\ngit pull origin pull/\u003cid\u003e/head:\u003cbranch-name\u003e\n```\n\n### Specific fetch reference\n```sh\ngit fetch origin master:refs/remotes/origin/mymaster\n```\n\n### List of all files till a commit\n```sh\ngit ls-tree --name-only -r \u003ccommit-ish\u003e\n```\n\n### Git reset first commit\n```sh\ngit update-ref -d HEAD\n```\n\n### Показать самый последний тег на текущей ветке\n```sh\ngit describe --tags --abbrev=0\n```\n\n### Revert: отменить коммит с помощью нового коммита\n```sh\ngit revert \u003ccommit-ish\u003e\n```\n\n### Revert: отменить слияние (merge) с помощью нового коммита\n```sh\ngit revert -m 1 \u003ccommit-ish\u003e\n```\n\n### Reset: Отменить коммиты (сброс к указанному коммиту)\n```sh\ngit reset \u003ccommit-ish\u003e\n```\n\n### Показать историю коммитов только для текущей ветки\n```sh\ngit cherry -v master\n```\n\n### Показать список удаленных репозиториев\n```sh\ngit remote\n```\n\n__Alternatives:__\n```sh\ngit remote show\n```\n\n### Изменить URL удаленного репозитория\n```sh\ngit remote set-url origin \u003cURL\u003e\n```\n\n### List references in a remote repository\n```sh\ngit ls-remote git://git.kernel.org/pub/scm/git/git.git\n```\n\n### Добавить удаленный репозиторий\n```sh\ngit remote add \u003cremote-nickname\u003e \u003cremote-url\u003e\n```\n\n### Автокомплит Git-команд в bash\n```sh\ncurl http://git.io/vfhol \u003e ~/.git-completion.bash \u0026\u0026 echo '[ -f ~/.git-completion.bash ] \u0026\u0026 . ~/.git-completion.bash' \u003e\u003e ~/.bashrc\n```\n\n### Перенести коммиты из одной ветки в другую с помощью cherry-pick\n```sh\ngit checkout \u003cbranch-name\u003e \u0026\u0026 git cherry-pick \u003ccommit-ish\u003e\n```\n\n### Undo local changes with the last content in head\n```sh\ngit checkout -- \u003cfile_name\u003e\n```\n\n### Показать все отслеживаемы файлы\n```sh\ngit ls-files -t\n```\n\n### Показать все неотслеживаемые файлы\n```sh\ngit ls-files --others\n```\n\n### Показать все игнорируемые файлы\n```sh\ngit ls-files --others -i --exclude-standard\n```\n\n### Create new working tree from a repository (git 2.5)\n```sh\ngit worktree add -b \u003cbranch-name\u003e \u003cpath\u003e \u003cstart-point\u003e\n```\n\n### Create new working tree from HEAD state\n```sh\ngit worktree add --detach \u003cpath\u003e HEAD\n```\n\n### Не отслеживать файл (без удаления)\nУдаляет файл из git, сохраняя при этом его локальную копию\n```sh\ngit rm --cached \u003cfile_path\u003e\n```\n\n__Alternatives:__\n```sh\ngit rm --cached -r \u003cdirectory_path\u003e\n```\n\n### Обновить все субмодули\n```sh\ngit submodule foreach git pull\n```\n\n__Alternatives:__\n```sh\ngit submodule update --init --recursive\n```\n\n```sh\ngit submodule update --remote\n```\n\n### Показать коммиты текущей ветки, которые будут слиты в мастер\n```sh\ngit cherry -v master\n```\n\n__Alternatives:__\n```sh\ngit cherry -v master \u003cbranch-to-be-merged\u003e\n```\n\n### Retrieve the commit hash of the initial revision\n```sh\n git rev-list --reverse HEAD | head -1\n```\n\n__Alternatives:__\n```sh\ngit rev-list --max-parents=0 HEAD\n```\n\n```sh\ngit log --pretty=oneline | tail -1 | cut -c 1-40\n```\n\n```sh\ngit log --pretty=oneline --reverse | head -1 | cut -c 1-40\n```\n\n### Deploying git tracked subfolder to gh-pages\n```sh\ngit subtree push --prefix subfolder_name origin gh-pages\n```\n\n### Adding a project to repo using subtree\n```sh\ngit subtree add --prefix=\u003cdirectory_name\u003e/\u003cproject_name\u003e --squash git@github.com:\u003cusername\u003e/\u003cproject_name\u003e.git master\n```\n\n### Get latest changes in your repo for a linked project using subtree\n```sh\ngit subtree pull --prefix=\u003cdirectory_name\u003e/\u003cproject_name\u003e --squash git@github.com:\u003cusername\u003e/\u003cproject_name\u003e.git master\n```\n\n### Экспортировать ветку в файл (создать пакет)\n```sh\ngit bundle create \u003cfile\u003e \u003cbranch-name\u003e\n```\n\n### Архивировать ветку master\n```sh\ngit archive master --format=zip --output=master.zip\n```\n\n### Ignore one file on commit (e.g. Changelog)\n```sh\ngit update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog\n```\n\n### Спрятать изменения перед выполнением перемещения\n```sh\ngit rebase --autostash\n```\n\n### Show changes using common diff tools\n```sh\ngit difftool -t \u003ccommit1\u003e \u003ccommit2\u003e \u003cpath\u003e\n```\n\n### Don’t consider changes for tracked file\n```sh\ngit update-index --assume-unchanged \u003cfile_name\u003e\n```\n\n### Undo assume-unchanged\n```sh\ngit update-index --no-assume-unchanged \u003cfile_name\u003e\n```\n\n### Восстановить удаленный файл\n```sh\ngit checkout \u003cdeleting_commit\u003e^ -- \u003cfile_path\u003e\n```\n\n### Restore file to a specific commit-hash\n```sh\ngit checkout \u003ccommit-ish\u003e -- \u003cfile_path\u003e\n```\n\n### Check if the change was a part of a release\n```sh\ngit name-rev --name-only \u003cSHA-1\u003e\n```\n\n### Squash fixup commits normal commits\n```sh\ngit rebase -i --autosquash\n```\n\n### Показать список игнорируемых файлов\n```sh\ngit check-ignore *\n```\n\n### Статус игнорируемых файлов\n```sh\ngit status --ignored\n```\n\n### Count unpacked number of objects and their disk consumption\n```sh\ngit count-objects --human-readable\n```\n\n### Prune all unreachable objects from the object database\n```sh\ngit gc --prune=now --aggressive\n```\n\n### Instantly browse your working repository in gitweb\n```sh\ngit instaweb [--local] [--httpd=\u003chttpd\u003e] [--port=\u003cport\u003e] [--browser=\u003cbrowser\u003e]\n```\n\n### Получить файл из другой ветки\n```sh\ngit show \u003cbranch_name\u003e:\u003cfile_name\u003e\n```\n\n### Изменить коммиты в интерактивном режиме\n```sh\ngit rebase --interactive HEAD~2\n```\n\n### Поиск коммита с багом при помощи бинарного поиска\n```sh\ngit 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\n```\n\n### Показать все локальные ветки, отсортировав их по дате изменения\n```sh\ngit for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/\n```\n\n### Find lines matching the pattern (regex or string) in tracked files\n```sh\ngit grep --heading --line-number 'foo bar'\n```\n\n### Количество коммитов в ветке\n```sh\ngit rev-list --count \u003cbranch-name\u003e\n```\n\n### Добавить заметку\n```sh\ngit notes add -m 'Note on the previous commit....'\n```\n\n### Apply commit from another repository\n```sh\ngit --git-dir=\u003csource-dir\u003e/.git format-patch -k -1 --stdout \u003cSHA1\u003e | git am -3 -k\n```\n\n### Найти общего предка двух веток\n```sh\ndiff -u \u003c(git rev-list --first-parent BranchA) \u003c(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1\n```\n\n### Показывает автора, время и хеш-коммита последнего изменения для каждой строки файла\nТакже можно выполнить команду с флагом `-s` для того, чтобы показывать автора и время коммита\n```sh\ngit blame \u003cfile-name\u003e\n```\n\n### Показывает автора, время и хеш-коммита последнего изменения для указанного диапазона строк\n```sh\ngit blame \u003cfile-name\u003e -L \u003cstart\u003e,\u003cend\u003e\n```\n\n### Show a Git logical variable\n```sh\ngit var -l | \u003cvariable\u003e\n```\n\n### Preformatted patch file\n```sh\ngit format-patch -M upstream..topic\n```\n\n### Показать название репозитория\n```sh\ngit rev-parse --show-toplevel\n```\n\n### Generates a summary of pending changes\n```sh\ngit request-pull v1.0 https://git.ko.xz/project master:for-linus\n```\n\n### Сделать резервную копию неотслеживаемых файлов\n```sh\ngit ls-files --others -i --exclude-standard | xargs zip untracked.zip\n```\n\u003c!-- Don’t remove or change the comment below – that can break automatic updates. More info at \u003chttp://npm.im/doxie.inject\u003e. --\u003e\n\u003c!-- @doxie.inject end --\u003e\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FImangazaliev%2Fgit-tips","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FImangazaliev%2Fgit-tips","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FImangazaliev%2Fgit-tips/lists"}