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.

Полезные материалы:

Автор: Сергей Тарабан