Git шпаргалка. Варианты работы с git. Сравнение команд svn и git.
В статье я опишу основные подходы при работе с гитом и основные команды git в сравнении с командами svn.
Автор: Сергей Тарабан
:ad:Сравнение команд svn и git
Таблица сравнения команд svn и git.SVN | Git | Overview |
svn update | git pull --rebase | Получить последние изменения с удаленного репозитория |
svn revert -R | git checkout . или git checkout -- . | Реверт всех незакомиченых изменений. |
git reset --hard origin/ | Полный реверт репозитория с удаление всех локальных комитов. | |
svn commit –m”” svn delete | git add -A . git commit -m”” git push orign | Коммит изменений в локальный репозиторий и, затем, пуш в удаленный репозиторий. |
svn co [folder] | git clone [folder] | Создать локальный репозиторий на основе удаленного. |
svnstatus | git status | Информация по репозиторию. |
svn log | git log --oneline | Лог |
svn add | git add -a . | Добавить все новые, удаленные или измененные файлы для комита. |
svn delete --keep-local svn rm --keep-local | git reset | Удалить файл/каталог из индекса |
Unsupported | git clean -f | Delete all untracked files |
svn update -r<rev_num> | git checkout <commit_hash> | Перейти на указанный комит |
- | git checkout <branch> | Вернуться назад |
svn remove | git rm | Удалить файл и добавить в индекс |
svn pedit svn:ignore . | Создайте файл .gitignoreв корне репозитория или в папке на уровень выше то, которую вы хотите добавить. Затем добавьте туда относительный путь к файлу или папке которую хотите добавить в игнор. | Добавить файл в игнор лист |
Подходты при работе с GIT.
Есть несколько подходов или вариантов работы с git. Каждый из этих правил удобно комбинировать между собой.1. SVN way
Этот подход очень похож на работу с SVN системой контроля версий. Т.к. git это распределенная система, у нас формально есть два репозитория - локальный и удаленный (origin). Все комиты мы делаем в свой локальный репозиторий командой commit, а затем делаем синхронизацию своего репозитория с удаленным командойpull --rebase.Параметр –rebase переносит наш комит на самую верхушку стека комитов, делая его самым актуальным. При этом могут быть конфликты, которые обычно легко разруливаются.
Будьте внимательный при разруливании конфликтов. При –rebase конфликте Thairs файлы - это ваши файлы, а Mine - с удаленного репозитория.
После этого делается синхронизация удаленного репозитория с нашим командой git push origin , где branch - текущая ветка. Если вы не делали новых веток в репозитории, это будет ветка по умолчанию - master.
2. Stash way
Работа через stash буфер. stash буфер - это фича, которая позволяет скрывать ваши изменения из файловой системы.Как это работает. Допустим, вы сделали изменения в файлах и хотите подтянуть более актуальную версию исходников с удаленного репозитория. Но вы не можете сделать pull –rebase, потому что у вас есть измененные файлы. Чтобы подтянуть новую версию вам нужно либо сделать commit, либо “спрятать” ваши измененные файлы.
git stash
Эта команда спрячет все что было добавлено в индекс. Если вы хотите спрятать Untracked файлы, нужно перед запуском команды выполнить git add.
Вы получаете чистый репозиторий и теперь можно сделать pull –rebase.
После пула можно вернуть ваши изменения из стеша командой git stash pop или git stash apply
Разница в командах в том, что первая удалит измения из стеша, а вторая нет.
Т.к. стеш является стековым буфером, в нем можно сохранять много изменений.
Подробнее: git help stash
3. Branching или бранчевание
Этот подход заключается в том, что любая новая фича, которую вы имплементируете, или баг, который вы фиксите, должен быть в отдельной ветке. Когда фикс или фича закончены, делается мерж этой ветки в master. При таком подходе стараются, чтобы разные бранчи работали с разными файлами и папками. Иначе будут проблемы с конфликтами при мерже веток.git branch - создаем новый бранчь.
git checkout - переходим на наш брачь
git push origin - пуш в новый бранчь на удаленном репозитории создаст наш бранчь там
git branch -a - смотреим все бранчи которые сейчас есть. Зеленым будет подсвечен наш текущий бранчь.
Текущий бранчь также показываете команда git status
Елси допустили ошибку можно удалить или переименовать бранчь
git branch -d - удалить бранчь
git branch -m - переименовать брачь
Допустим нам понадобилась свежая версия файлов из бранча master. Делаем merge c бранчем master.
git checkout master - переключились на ветку master
git pull –rebase - обновили её до самой последней версии
git checkout [our_branch] - переключились на нашу ветку
git merge master - подтянули в нашу ветку изменения с ветки master
Когда мы сделали фичу мы хотим чтобы она полявилась в мастере. Делаем все то же самое что выше только для мастера.
git checkout [our_branch] - переключились на нашу ветку если мы не в ней git pull –rebase - обновили её до самой последней версии git checkout master - переключились на ветку master
git pull –rebase - обновили её до самой последней версии
git merge [our_branch] - подтянули в master изменения с нашей ветки
Будет создан мерж комити автоматически, так что осталось только залить изменения на удаленный репозиторий командой git push origin master.
Полезные материалы:
Автор: Сергей Тарабан