Git Flashcards
Переименовать ветку
git branch -m main
Подтянуть изменения
git pull –rebase
Восстановить удаленный файл (из рабочей директории) или отменить изменения в файле
git restore some_filename
Команда, которая удаляет файл и одновременно подготавливает изменение к коммиту
git rm some_filename # равносильно rm + git add
Какие изменения по умолчанию показываются командой git diff, как копнуть глубже?
По умолчанию git diff показывает изменения только для тех модифицированных файлов, которые еще не были добавлены в индекс. Подразумевается, что добавленные в индекс файлы смотреть не нужно, ведь мы их уже подготовили к коммиту.
Для этого нужно запустить команду с флагом –staged
git diff –staged
Вывод истории коммитов с записями одной строчкой
git log –oneline
git log –pretty=oneline # полные хэши
Сокращенный хэш-идентификатор коммита, откуда берется?
Первые 7 символов полного хэша
Команда для просмотра изменений в рамках одного коммита
git show хэш_коммита
Выведется diff м/у этим коммитом и предыдущим
Команда для того чтобы узнать кто последним менял строчку в файле
git blame file_name
Команда для поиска по репозиторию
git grep some_line
Она удобнее обычного grep, так как знает про игнорирование и не смотрит в директорию .git, а еще умеет искать по истории:
git grep -i hexlet # Флаг i позволяет искать без учета регистра
git grep Hexlet 5120bea # Поиск в конкретном коммите
git grep Hexlet $(git rev-list –all) # Поиск по всей истории, rev-list возвращает список хешей коммитов
Как очистить рабочую директорию от неотслеживаемых файлов
git clean -fd # -f – force, -d – directory
Отменить изменения файлов подготовленных к коммиту (staged)
Первый вариант — отменить изменения совсем, второй — отменить только индексацию, не изменяя файлы в рабочей директории. Второе полезно в том случае, если изменения нам нужны, но мы не хотим их коммитить сейчас.
git restore –staged INFO.md # извлечет из индекса
После этого можно повторно выполнить git restore для окончательного отката.
Команда для отмены изменений
git revert хэш_коммита
Создается еще один коммит, который выполняет изменения, противоположные тому коммиту, который отменяется.
Команда для удаления коммита
git reset –hard HEAD~
Не применять в совместных проектах - ломает историю у остальных, соответственно нежелательно применять после отправки на хостинг.
–hard означает полное удаление. Без него git reset отменит коммит, но не удалит его, а поместит все изменения этого коммита в рабочую директорию, так что с ними можно будет продолжить работать. HEAD~ означает “один коммит от последнего коммита”.
HEAD~2 # удалить два последних коммита.
Команда изменения последнего коммита (добавить файлы)
выполнять, только если не были отправлены на хостинг - под капотом выполняется в том числе reset. –amend не добавляет изменения в существующий коммит, этот флаг приводит к откату коммита (через reset) и выполнению нового коммита с новыми данными.
git commit –amend –no-edit
–amend не добавляет изменения в существующий коммит, этот флаг приводит к откату коммита (через reset) и выполнению нового коммита с новыми данными.
Т.к под капотом выполняется reset, то нельзя выполнять после отправки на хостинг.
Как перейти к режиму в котором можно выбирать для индексирования отдельные части (в том числе строки файла)
git add -i
git add –interactive
Какую команду крайне желательно выполнить перед коммитом (чтобы изучить сделанные изменения)
git diff –staged
Команда для того чтобы узнать текущее местоположение, если не настроен PS1
git branch
Команда для перемещения по истории | переключения на какой-либо коммит
git checkout хэш_коммита
git checkout main
.gitignore специфика путей и имен
access.log # игнорируется файл в любой директории проекта
node_modules/ # Игнорируется директория в любой директории проекта
/coverage/ # игнорируется каталог в корне рабочей директории
/db/.sqlite3 # игнорируются все файлы с расширением sqlite3 в директории db
, но не игнорируются такие же файлы внутри любого вложенного каталога в db
doc/**/.txt # игнорировать все .txt файлы в каталоге doc/ на всех уровнях вложенности
Удалить файл из репозитория, но не из рабочей директории
git rm –cached
“Припрятать” текущие наработки (рабочая директория и индекс)
git stash
git stash pop # вытащить из стека
Как сделать запрос на включение изменений кода (pull request)
Первым шагом необходимо создать копию репозитория в своем аккаунте. Делается это буквально одной кнопкой «Fork» на странице репозитория.
После этого действия в вашем аккаунте окажется репозиторий с таким же именем. GitHub знает, что это копия оригинального репозитория, и помечает его особым образом. Дальше все как обычно. Мы клонируем репозиторий на компьютер и производим необходимые изменения. Хорошей практикой считается делать изменения в отдельной ветке (обычно созданной от ветки main).
После того как изменения залиты на GitHub, в его интерфейсе произойдут изменения. На странице склонированного репозитория появится кнопка «pull request».
Если ее нажать, то откроется страница, на которой можно указать название пулреквеста и его описание. После отправки пулреквеста в исходном (оригинальном) репозитории на странице «Pull requests» отобразится ваш запрос.
В более простых ситуациях, когда достаточно исправить текст или опечатку, GitHub позволяет сделать пулреквест прямо из своего интерфейса. Для этого достаточно открыть любой файл проекта и нажать на иконку редактирования. После завершения редактирования GitHub сам предложит создать пулреквест с этим изменением.