Инструменты пользователя

Инструменты сайта


programming:git:git-help

Команды GIT

git config --global --add merge.ff false

git config –global core.autocrlf input

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 - логи коммитов 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

programming/git/git-help.txt · Последние изменения: 2019/06/07 12:14 — artur