Last active
August 10, 2021 09:18
-
-
Save Alex-Space/eb34d8db38d41b9a19ba to your computer and use it in GitHub Desktop.
doc GIT
This file contains 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
git config --global user.name "Alex-Space" | |
git config --global user.email "[email protected]" | |
git init - новый репозиторий | |
git status - состояние: что было редактировано, что добавлено в индекс для коммита | |
git add . - добавить в индекс все изменения | |
git add file.txt - добавить содержимое файла в индекс | |
git add -i - интерактивное добавление позволяет выбирать файлы, которые надо добавить. Для каждого файоа можно добавить некоторые изменения, другие оставить для следующего коммита. | |
git add -p - про каждое изменение в файле спрашивает, добавить его в индекс или нет -p==patch | |
git commit -m "initial commit" - первый commit (некоторые команды криво работают, пока не сделать первый коммит) | |
git commit -am "comment" - add + commit, но новые файлы не будут добавлены | |
git commit --amend - докоммитить предыдущий коммит. если что еще надо в него добавить или изменить текст коммита: | |
git commit --amend -m "new comment" | |
git commit --amend -C HEAD - не менять текст коммита. Вместо HEAD может быть любая ссылка на коммит, например: | |
- HEAD - последний коммит текущей ветки | |
- sha1_hash коммита | |
- имя ветки | |
- имя_ветки~2 - два коммита назад от HEAD'a ветки | |
- тег | |
- HEAD^2 - два коммита назад от HEAD | |
- HEAD~1 - тоже два коммита назад от HEAD | |
git log --diff-filter=D --summary - посмотреть удаленные файлы | |
git checkout ХЭШ_КОММИТА_КОМАНДЫ_СВЕРХУ^ --названиеФайла - восстановить удаленный файл | |
git clone -b <branch> <repo> - скачать именно из конкретной ветки проект | |
git checkout --orphan <branchname> - | |
git remote -v - узнать с каким удаленным репозиторием связан наш проект | |
git config --list - вывести все настройки в Гите (в том числе к какому удаленному репозиторию подключена папка) | |
git help название команды - по которой хотим получить помощь и описание | |
git init - инициализировать гит в папке, в которой мы находимся | |
git status - показать статус нашего текущего проекта | |
git add (пишем файлы, которые добавляем) - добавить в индекс | |
git commit -m "комментарий коммита" - закоммитить все что в индексе | |
git log - посмотреть все коммиты, которые были | |
git remote add origin (ссылка) - добавить удаленный репозиторий, на который будут отправлены наши коммиты | |
git push -u origin master - отправить наш проект с компа в репозиторий Гитхаба, который указывали сверху. Флаг u означает, что мы запоминаем параметры, что в следующий раз написав git push, он отправит данные в репозиторий origin и ветку master | |
git pull origin master - эта команда стянет репозиторий origin и ветку master | |
git diff HEAD - если кто-то поработал с нашим репозиторием и что-то поменял там, мы хотим проверить какие изменения там были произведены | |
git reset (путь или имя файла) - сбрасывает его из индекса, если мы добавили его туда, но не успели закоммитить | |
git branch (имя ветки) - создание новой ветки | |
git checkout (имя ветки) - перейти на созданную ветку | |
git rm (указание файлов) - удаление из гита | |
git branch -d <branch name> - удаление ветки | |
git log - логи коммитов | |
git log --all - все ветки | |
git log --graph --all --oneline - все ветки, показать связь между ветками. информация об одном коммите должна влезать на одну строку | |
git log -p - патчи | |
git branch - список веток | |
git branch newfeature - создать ветку newfeature | |
git checkout newfeature | |
или тоже самое одной командой: | |
git checkout -b newfeature | |
...редактирование (программирование фичи) | |
git commit -am "new feature done" - ее commit | |
git checkout master - переход в ветку master | |
git merge newfeature - объединение ветки newfeature с master | |
теперь в master работает новая фича. | |
Если при слиянии возникли конфликты, то посмотреть на них можно: | |
git status | |
edit Press.pm - поправить | |
git add Press.pm | |
git commit - завершает процесс слияния | |
Если надоело разрешать конфликты, то можно вернуть обе ветки в исходное состояние: | |
git reset --hard HEAD | |
А если commit завершен, то вернуть обратно можно так: | |
git reset --hard ORIG_HEAD | |
git checkout -f - отметить незакоммиченные изменения | |
git checkout -- file.txt - вынимает версию файла, подготовленную к коммиту (после git add file.txt) | |
git checkout <commit> file.txt - из указанного коммита | |
git tag v4.2 - простой тег | |
git tag -a v4.2 -m "stable v4.2" - аннотированный тег (более подробный, вроде commit'a) | |
git tag -d v4.2 - удалить | |
git tag - список тегов | |
git tag -l <pattern> - поиск по шаблону | |
git log v4.2 - все коммиты, начиная с тега v4.2 | |
git log v4.2 Press.pm - все коммиты, начиная с тега v4.2, в включающие изменения файла Press.pm | |
git branch --contains v4.2 - ветки с этой меткой | |
git show v4.2 - на какой commit указывает тег, когда и кем был сделан. | |
git describe - показывает сколько коммитов было с последнего тега: | |
v4.2-g[хэш последнего коммита] | |
git reset - undo | |
git reset --hard <commit> - отменить самым радикальным и не поправимым образом все, что было сделано и закоммичено после коммита <commit>. Рабочая папка тоже будет содержать проект из этого коммита. | |
git reset --soft <commit> - делает <commit> последним коммитом (HEAD'ом). Рабочая папка остается не тронутой. | |
git giu - оконный интерфейс в windows | |
gitk - оконный интерфейс в linux | |
gitk --all - все ветки | |
git update-index - обновить индекс содержимого файлов | |
git update-index --add - добавлять файлы с диска | |
git update-index --remove - удалять файлы, если их нет на диске | |
git diff - все изменения от последнего commit'a | |
git diff file.txt - изменения в одном файле | |
git diff --cached - сравнение последнего commit'a и того, что подготовлено для нового коммита | |
git diff <commit> - сравнение commit'a и рабочей папки, например | |
git diff HEAD^2 file.txt | |
git diff --stat sha1old..sha2new - список файлов и количество измененных строк между двумя коммитами | |
Сравнение двух веток: | |
git diff master..newfeature - сравнение двух последних коммитов веток | |
git diff master...newfeature - показывает разницу между последним коммитом в newfeature и его последнего предка в master. Полезно, если ветка newfeature была объединена с master, а потом в ней еще что-то изменилось. Тогда эта команда покажет разницу с последнего merga. | |
git blame file.txt - кто и когда редактировал файл | |
Временные коммиты | |
git stash - сделать временный коммит рабочей папки | |
... поправить что-нибудь в другой ветке, переключиться обратно и | |
git stash apply - вернуть рабочую папку обратно. | |
git status list - выводит список стешей, их может быть много, например: | |
git stash save "comment" | |
git stash apply stash@{1} - где stash@{1} - нужный стеш из git status list | |
Файл .gitignore - список шаблонов файлов, история по которым не ведется. То есть файлы, которые не попадают в репозиторий Например: | |
#пароли к бд | |
MyConfig.pm | |
#temp files: | |
*.*~ | |
#все логи, кроме ошибок | |
*.log | |
!error.log | |
Или можно запретить все, кроме избранных файлов: | |
*.* | |
!*.pl | |
!*.pm | |
Удаленные repo: | |
git branch -a - список веток, включая удаленные (т.е. с исходного репозитория) | |
git remote add remoteName remoteURL - добавить удаленную ветку. | |
Все удаленные репозитории показываются в файле .git/config | |
[remote "origin"] | |
fetch = +refs/heads/*:refs/remotes/origin/* - связи между ветками | |
url = http://sn:@192.168.0.2/project/projectname.git | |
Забрать изменения с удаленного компьютера можно двумя способами: | |
1) | |
git fetch origin master - забирает с удаленного компьютера изменения в ветке master | |
git diff master..origin/master - посмотреть, что изменилось | |
git checkout -b testbranch | |
и | |
git merge origin/master - объединить изменения с удаленного компьютера с веткой master | |
...протестировать | |
git checkout master | |
git merge testbranch | |
2) все это одной командой (если не надо тестировать): | |
git pull origin master | |
git push origin master - пихает изменения из текущей ветки в origin master. Желательно делать push только в bare репозитории, т.к. команда push портит содержимое рабочей папки. | |
git rebase master - на master накладывается текущая ветка (сначала будут идти все коммиты master, потом все коммиты текущей ветки). Если просто объединить, то коммиты будут перемешаны и получится не красиво. | |
если возникли конфликты, их надо разрешить и запустить | |
git rebase --continue | |
Если надоест: | |
git rebase --abort - отменить все | |
git rebase --skip - пропустить один коммит | |
git rebase -i HEAD~10 - почистить историю последних 10 коммитов | |
в текстовом редакторе (из переменной окружения EDITOR) откроется список коммитов в формате: | |
pick hash message | |
Чтобы удалить коммит - удалить строку, | |
Поменять порядок коммитов - поменять порядок строк | |
объединить коммит с предыдущим - pick поменять на squash | |
для внесения изменений в коммит - pick на edit | |
После этого, если отметили коммиты, то | |
git commit --ament | |
если нет, то | |
git commit --continue | |
Подробности в git help rebase | |
git filter-branch --tree-filter 'rm cgi-bin/MyConfig.pm' HEAD Удалить файлы из всех коммитов | |
подробности в git help filter-branch | |
поиск коммита, в котором возникла ошибка: | |
git bisect start | |
git bisect bad sha1_bad_commit | |
git bisect good sha1_good_commit | |
git извлечет состояние по середине между хорошей и плохой версиями. | |
Если в этом состоянии по прежнему есть ошибка: | |
git bisect bad | |
Если работает, то | |
git bisect good | |
После окончания изменения надо выполнить | |
git bisect reset | |
Можно автоматизировать процесс тестирования командой: | |
git bisect run "perl testrun.pl" | |
Скрипт testrun.pl должен возвращать 0, если все хорошо. | |
импорт-экспорт истории: | |
git fast-import </tmp/history | |
git fast-export >/tmp/history | |
submodule | |
Позволяет добавлять посторонние репозитории в отдельную папку проекта. | |
Подробности git help submodule | |
Недостатки: | |
1. Команда git archive игнорирует субмодули | |
2. в рабочей копии после git checkout надо выполнять | |
git submodule update --init | |
subtree | |
История коммитов из внешнего проекта перенаправляется в подпапку с использованием стандартного механизма работы с внешними ветками. | |
git remote add -f creocms /path/to/creocms | |
git merge -s ours --no-commit creocms/master | |
git read-tree --prefix=creocms/ -u creocms/master | |
git commit -m "Merge creocms" | |
Изменения из creocms вытягиваются командой: | |
git pull -s subtree creocms master | |
В каждой рабочей копии надо выполнять | |
git remote add -f creocmms /path/to/creocms | |
И в каждой новой ветке: | |
git fetch creocms | |
http://www.youtube.com/watch?v=BBzHl_j86bc - как сгененировать и использовать SSH ключ на GitHub |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment