Skip to content

Instantly share code, notes, and snippets.

@neyasbltb88
Created March 26, 2021 14:50
Show Gist options
  • Save neyasbltb88/e421cd624f61a843d651f85e8d5e3e17 to your computer and use it in GitHub Desktop.
Save neyasbltb88/e421cd624f61a843d651f85e8d5e3e17 to your computer and use it in GitHub Desktop.
> Инициализация репозитория
git init
> Добавление всех файлов в репозиторий на отслеживание
git add .
git add Имя_файла
> Коммит
git commit -m "Описание коммита"
> Быстрый коммит + автодобавление в буфер
git commit -am "Описание коммита"
_____________ LOG _______________
> Просмотр лога коммитов
git log
> Лимит вывода коммитов, для примера 5
git log -n 5
> Коммиты с определенной даты
git log --since=2018-09-20
> Коммиты до определенной даты
git log --until=2018-09-20
> Коммиты промежутка времени
git log --since=2018-09-20 --until=2018-09-20
> Коммиты определенного автора
git log --author="Neyasbltb"
> Поиск коммитов по регулярке
git log --grep="Init"
> Логи в одну строку
git log --oneline
> Диапазон логов между известными коммитами
git log ЧАСТЬ_ХЭША_1..ЧАСТЬ_ХЭША_2
>> Лог начиная с определенного коммита + для определенного файла
git log ЧАСТЬ_ХЭША.. Имя_файла
> Статистика изменений в логах (число изменений и место)
git log --stat --summary
_____________ Статус и изменения _______________
> Показать статус (текущий бранч и незакоммиченные изменения)
git status
> Изменения перед коммитом надо добавлять в буфер
git add . (git add Имя_файла)
> Показ изменений между репо и папкой
git diff
> Показ изменений в определенном файле
git diff Имя_файла
> Показ изменений между буфером и папкой
git diff --staged
> Строки изменений в git diff вписываются в ширину и переносятся
"-" + shift + s + enter (return)
> Показ изменений не целыми строками, а отдельными измененными
словами, вставленными рядом
git diff --color-words
_____________ Удаление файлов _______________
> После ручного удаления файла в статусе он будет помечен
как deleted, его надо удалить из репо, а затем закоммитить
git rm Имя_файла
> Удаление файла и сразу инфа об этом в буфер
git rm Имя_файла
> Удаление неотслеживаемых файлов из папки
git clean -n (показывает все, что собирается удалить)
git clean -f удаляет все то, что не занесено в репо и показала -n
_____________ Изменение файлов _______________
> После ручного переименования файлов в статусе будет отметка
об удалении файла со старым именем и отс=метка об неотслеживаемом
файле с новым именем. Надо 2 команды для добавления в буфер, а потом коммит
git add Новое_имя_файла
git rm Старое_имя_файла
> Переименование средствами git и добавление в буфер
git mv Старое_имя_файла Новое_имя_файла
> Перемещение в другую папку средствами git и добавление в буфер,
также можно сразу здесь менять имя файла
git mv Имя_файла Новая_папка/Имя_файла
_____________ Отмена и изменения _______________
> Возврат версии файла из репо (не закоммичены изменения)
git checkout Имя_файла
> Чтобы при этом git не пытался переключить бранчи, перед именем файла --
git checkout -- Имя_файла
> Отмена измененных файлов в буфере (вернуть обратно git add)
git reset HEAD Имя_файла
> Изменение ПОСЛЕДНЕГО коммита (или переименование)
git commit --amend -m "Сообщение коммита"
>> Вернуть версию определенного файла из любого прошлого коммита.
При этом файл попадет не в рабочую директорию, а в буфер.
git checkout ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА -- Имя_нужного_файла
> Перевернуть изменения в коммите - все, что было добавлено удалится,
а что было удалено вернется. При этом делается полный коммит
git revert ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА
_____________ GIT RESET _______________
>> Перемещает HEAD на указанный коммит, имеет 3 параметра:
--soft самый безобидный возврат. Перемещает только HEAD, при этом буфер
и рабочая директория остаются не тронуты
--mixed(default) перемещает HEAD на указанный коммит и приводит буфер в
соответствие с указанным коммитом. Рабочая директория не изменяется
--hard возвращает все в соответствие с указанным коммитом. Репозиторий,
буфер и рабочая папка приводятся к состоянию указанного коммита, все
изменения, внесенные с тех пор теряются
> Возврат к коммиту
git reset --soft ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА
_____________ ИГНОРИРОВАНИЕ ФАЙЛОВ _______________
> Создается файл .gitignore и в нем в столбик перечисляются имена файлов,
можно использовать подстановочную *, например, *.php проигнорит все
php файлы. Поддерживаются регулярки и отрицание ! Игнор всех файлов в папке:
Папка_игнора/ (слеш в конце обязательно). Комменты в нем начинаются с #
> Для игнорирования ранее отслеживаемых файлов, нужно эти файлы удалить из
буфера(кеша) и добавить в .gitignore
git rm --cached Имя_файла
> ИНФО. git отслеживает файлы, а не директории. Чтобы следил за пустой
папкой, надо в нее добавить пустой файл, обычно .gitkeep
_____________ ПЕРЕМЕЩЕНИЕ ПО ДЕРЕВУ КОММИТОВ _______________
> На один коммит назад
HEAD^, ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА^, master^
> На указанное количество коммитов назад
HEAD~2 или HEAD^^
>> Посмотреть все отслеживаемые файлы в последнем коммите
git ls-tree HEAD
> Или из конкретной папки
git ls-tree HEAD Имя_папки/
_____________ ПРОСМОТР И СРАВНЕНИЕ КОММИТОВ _______________
> Показывает автора, время, в каких файлах и что изменено
git show ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА
> Показать разницу между рабочей директорией и коммитом
git diff ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА
> Показать разницу между рабочей директорией и коммитом в конкретном файле
git diff ЧАСТЬ_ХЭША_НУЖНОГО_КОММИТА Имя_файла
> Сравнить два коммита
git diff ЧАСТЬ_ХЭША_1..ЧАСТЬ_ХЭША_2
_____________ БРАНЧИ _______________
> Посмотреть существующие бранчи
git branch
> Просмотр удаленных бранчей
git branch -r
> Просмотр и локальных и удаленных бранчей
git branch -a
> Создание нового бранча(только буквы, цифры и _)
git branch Имя_нового_бранча
> Переключение на другой бранч
git checkout Имя_бранча
> Создание бранча и переключение на него
git checkout -b Имя_нового_бранча
> Сравнение бранчей
git diff Имя_бранча1..Имя_бранча2
> Показать все бранчи, которые полностью включены в текущий
git branch --merged
> Переименовать бранч
git branch -m Имя_бранча Новое_имя_бранча
> Удаление бранча (надо выйти из него). Если в этом бранче
есть коммиты, которых нет в других, git выдаст предупреждение
git branch -d Имя_бранча
> Для удаления бранча, не слитого с другими(потеря каких-либо данных)
git branch -D Имя_бранча
_____________ СЛИЯНИЕ БРАНЧЕЙ _______________
> Быстрое слияние
git merge Имя_бранч
> Принудительный коммит слияния
git merge --no-ff Имя_бранча
> Сделать слияние, если оно будет быстрым
git merge --ff-only Имя_бранча
> Обрыв процесса слияния при конфликте
git merge --abort
> После исправления конфликта git add измененных файлов и
git commit (в процессе слияния можно без сообщения, будет дефолтное)
_____________ КОПИЛКА (STASH) _______________
> Сохранение в копилку. Одна и та же копилка доступна из всех бранчей
git stash save "Описание копилки"
> Просмотр содержимого копилки
git stash list
> Краткая инфа о первом элементе копилки
git stash show stash@{0}
> Полная инфа в вде патча о первом элементе копилки
git stash show -p stash@{0}
> Забрать элемент из копилки и поместить изменения в рабочую директорию
(с удалением элемента из копилки). Если не указать элемент, по умолчанию
будет вытаскиваться первый элемент
git stash pop stash@{0}
> Забрать элемент из копилки и поместить изменения в рабочую директорию
(в копилке остается копия). Если не указать элемент, по умолчанию
будет вытаскиваться первый элемент
git stash apply stash@{0}
> Удаление элемента копилки
git stash drop stash@{0}
> Удаление всех элементов копилки
git stash clear
_____________ УДАЛЕННЫЕ РЕПОЗИТОРИИ _______________
> Посмотреть все GitHub репо
git remote
> Шаблон добавления GitHub репо. При создании нового репо на GitHub,
он выдает по дефолту алиас origin и дает url созданного репо
git remote add <alias> <url>
> Удаление GitHub репо
git remote rm <alias>
> Просмотр GitHub бранчей
git branch -r
> Просмотр и локальных и GitHub бранчей
git branch -a
> Получить первый раз GitHub репо(имя папки и бранча опционально)
git clone <url> <Имя_будущей_папки> -b <Имя_бранча>
> Отправить(создать) не отслеживаемый бранч на GitHub репозиторий
git push origin <имя локального/создаваемого на сервере бранча>
> Перая отправка на GitHub репозиторий (-u связывает их и делает отслеживаемым)
git push -u origin master
> Дальнейшая отправка на отслеживаемый репозиторий
git push
> Получить обновление с GitHub для одного отслеживаемого бранча на локальный репозиторий.
Команда безвредная, можно/нужно днлать часто (не вносит изменений в рабочую директорию,
изменяется только origin/master). После fetch надо делать слияние
git fetch
> Слияние как с обычным бранчем
git merge origin/master
> Получение обновлений с GitHub за одно действие
(git pull = git fetch + git merge)
git pull
> Получить бранч с GitHub в локальную версию. Будет создан отслеживаемый бранч
git branch <Имя_бранча> <origin/Имя_бранча>
>> Получить бранч с GitHub и сразу на него переключиться
git checkout -b Имя_бранча origin/Имя_бранча
> Пред отправкой на GitHub надо делать fetch, затем merge с origin, только потом push
> Удаление бранча на GitHub (1 способ)
git push origin :Имя_бранча
> Удаление бранча на GitHub (2 способ, понятнее)
git push origin --delete Имя_бранча
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment