-
-
Save mikkabond/62af0cb1e3e4d5d77d693248a4eba9b9 to your computer and use it in GitHub Desktop.
git commands and hacks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## https://dev.to/nishina555/how-to-ignore-files-already-managed-with-git-locally-19oo | |
## как игнорировать изменения уже отслеживаемого файла/папки | |
# если нужно менять локально и не отправлять затем в основную ветку | |
git update-index --skip-worktree путь/к/файлу/файл | |
# обратная операция | |
git update-index --no-skip-worktree путь/к/файлу/файл | |
# если не нужно менять локальные файлы (при подтягивании изменений из основной ветки) | |
git update-index --assume-unchanged путь/к/файлу/файл | |
# обратная операция | |
git update-index --no-assume-unchanged путь/к/файлу/файл | |
## список файлов в индексе и рабочем дереве с проверкой (-v) на игнорируемость | |
git ls-files -v | |
# в выводе вначале строки идет признак: S - применена опция skip-worktree | |
# в выводе вначале строки идет признак: h - применена опция assume-unchanged | |
# поиск файлов, игнорируемых через опции skip-worktree и assume-unchanged | |
git ls-files -v|grep -E "^[S|h]" | |
## использование временного хранилища для изменений в ветке | |
# сохранить изменения | |
git stash save | |
# извлчеь последнее помещенное в хранилище | |
git stash pop | |
# очистить хранилище полностью | |
git stash clear | |
# переключение на ветку | |
git checkout ветка | |
# слить текущую ветку с изменениями в "ветка" | |
git merge ветка | |
# посмотреть, где настройки | |
git config --list --show-origin | |
# посмотреть настройки | |
git config --list | |
# узнать источник настройки | |
git config --show-origin настройка | |
# переместить все изменения текущей ветки в другую ветку (в случае, когда редактируешь код не в той ветке) | |
git stash | |
git checkout другая_ветка | |
git stash pop | |
# .gitignore должен быть добавлен до первого коммита в репозиторий, чтобы сам по себе не подвергался отслеживанию | |
.gitignore | |
cache/ | |
tmp/ | |
node_modules/ | |
**/cache/** | |
**/debug/** | |
**/logs/** | |
**/tmp/** | |
**/*.bak | |
**/*.txt | |
.vscode/ | |
# создать репозиторий в папке и залить в заранее созданный пустой проект на github или gitlab (для примера udemy-express.git) | |
git init | |
git remote add origin https://gitlab.com/mikkabond/udemy-express.git | |
git add . | |
git commit -m 'Initial commit' | |
git push -u origin master | |
# посмотреть адрес удаленного (сетевого) репозитория | |
git remote show origin | |
# насильно переписать удаленный репозиторий после правок на локальном (например, если отправил комит в репу, а потом его надо удалить) | |
git push origin +master | |
# слить коммиты в один | |
1> git rebase --interactive <хэш коммита, после которого объединять вплоть до крайнего, или HEAD~[N], где N - кол-во коммитов назад от крайнего, включая его> | |
2> в открывшемчя окне редактора пометить нужные коммиты для слияния s, а как начальную точку - p | |
3> разрешать конфликты по мере их появления и указать коментарий для итогового коммита | |
#удалить ветку в удаленном репозитории | |
git push origin --delete <имя ветки> | |
#удалить ветку локально | |
git branch -d <имя ветки> | |
# информация о репозиториях | |
git remote -v | |
# как добавить правки в последний зафиксированый коммит: | |
## с возможностью редактирования комментария к коммиту | |
git commit --amend | |
## без редактирования комментария, но просто добавить правки | |
git commit --amend --no-edit | |
## добавить/изменить только комментарий | |
git commit --amend -m "измененный комментарий" | |
## отправить изменнный таким образом коммит в репу origin в ветку some_branch, если раннее уже отправляли | |
git push -f origin some_branch | |
# чтобы при повторном редактировании комментариев можно было использовать # вначале строки | |
git config --global core.commentchar ';' | |
# очистка текущего индекса от правок (-n для прогона без действий) | |
git clean -f | |
# если возник merge конфликт | |
1) git status - чтобы увидеть какие именно файлы с конфликтами | |
2) поправить файл в редакторе | |
3) git add . | |
4) git commit | |
# удаление веток | |
## локальную | |
git branch -d feature/login | |
## удаленную | |
git push origin --delete feature/login | |
# откатить последний коммит с потерей всех изменений и отправить этот откат в удаленный репозиторий | |
git reset --hard HEAD~1 | |
git push --force origin | |
# загрузить и переключиться на несуществующую локально удаленную ветку release_3.2.1 из репозитория origin | |
git checkout --track origin/release_3.2.1 | |
# то же самое, если нужно создать локальную ветку с другим именем (foobar например) | |
git checkout --track -b foobar origin/release_3.2.1 | |
# вывести список файло в коммите по хэшу | |
git show --pretty="" --name-only <commit hash> | |
# еще вариант | |
git diff --name-only HEAD^ | |
#архивировать в arch файлы с полными путями из определенного комита (в примере HEAD) | |
#https://tosbourn.com/using-git-to-create-an-archive-of-changed-files/ | |
git archive --format=zip -o arch.zip HEAD $(git diff --name-only HEAD^) | |
#получить разицу в файлах между ветками (например, чтоб определить какие файлы менялись между master и текущей веткой) | |
git diff --name-only master..HEAD | |
# добавить file, который уже под версионным контролем, в gitignore | |
1) Edit .gitignore to match the file you want to ignore | |
2) git rm --cached /path/to/file | |
# удалить все коммиты ДО (не включая) ххх | |
git reset --hard ххх | |
# схлопнуть несколько комитов, следующих сразу за комитом 1234, в один в интерактивном режиме | |
# https://www.internalpointers.com/post/squash-commits-into-one-git | |
git rebase --interactive 1234 | |
# в открывшемся файле согласно инструкции указать операцию (в общем случае s - схлопывание), которую произвести с каждым из схлопываемых комитов (кроме первого/самого старого), сохраниться | |
# в открывшемся файле согласно инструкции указать комментарий к итоговому комиту, сохраниться | |
# добавить в ветку master коммит b886a0 из другой ветки | |
git checkout master | |
git cherry-pick b886a0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment