Создание рабочего каталога
mkdir папка
Инициализация (создание) репозиторий git в рабочем каталоге
cd папка
git init
или клонирование файлов из уже существующего git репозитория
git clone путь
где путь может быть:
при наличии ssh доступа ваш.компьютер:/путь
при наличии запущенного демона git git://ваш.компьютер/путь
из общей сетевой папки – file:///путь
История комитов
git hist
Связывание удаленной (отслеживаемой) ветки с локальной (что бы не указывать имя удаленных репазитария и ветки при выполнении push и pull)
git branch -u <удаленный репазиторий>/<удаленная ветка>
Настройка синхронизации только текущей локальной ветки (а не всех локальных веток) с удаленным репазитарием при выполнении push (параметр simple)
git config --global push.default simple
Обновление до последней версии ранее клонированных файлов
git pull
Добавление содержимого рабочего каталога в репозиторий (файлов, состояние которых будет отслеживаться) добавление одного файла и/или индексирование измененных файлов (подготовка их к commit)
git add file
добавление всех файлов в текущей папке
git add *
добавление всех файлов и папок
git add .
добавить все измененные файлы
git add -u
Фиксирование файлов, подготовленных к изменению (проиндексированных)
git commit –m “описание версии”
или вместе с индексацией
git commit –a –m “описание версии”
создаем новую ветку (например для создания новой версии проекта) и переходим на ее использование
git checkout ветка
или создаем ветку и сразу переходим на ее использование
git checkout -b ветка
возвращаемся в старую ветку (например в старую версию проекта master)
git checkout master
Объединяем текущую ветку (например master) и новую ветку
git merge ветка
Удаляем ветку с которой объеденились (если она больше не нужна)
git branch -d ветка
Настройка git
git config - -global user.name имя
git config - -global user.email mail
git config --global diff.tool vimdiff
git config --global merge.tool vimdiff
Переходы между различными состояниями 1) неотслеживаемые файлы 1 -> 2
git add .
2) отслеживаемые файлы 2 -> 3
git add .
3) проиндексированные файлы (staged) 3 -> 4
git commit -m "описание"
или сразу с индексацией (2->4) (! так индексируются только новые файлы)
git commit -am "описание"
4) файлы в локальном репазитории (commit) 4 -> 5
git push
5) файлы в удаленном репазитории 5 -> 6
git pull
6) файлы в локальном репазитории разница между последним commit и рабочей директорией
git diff
или
git difftool
разница между последним commit и проиндексированнами файлами
git diff --staged
Организация веток: master — текущий релиз (каждый merge с develop и commit после этого - это релиз) develop - текущая разработка (ответвляется от master) topic - новая функция (ответвляется от develop) hotfix-* - исправление ошибок (ответвляется от master вливается в master и develop) Вариант организации совместной работы:
HEAD указывает на текущий commit HEAD^ указывает на комит перед последним комитом Отменить непроиндексироанные (соответственно незакоммиченные) изменения:
git checkout -f
или
git reset --hard HEAD
Отменить последний комит (комит отменится, изменения в рабочей директории останутся в проиндексированном состоянии)
git reset --soft HEAD^
Отменить последний комит (изменения в рабочей директории будут утеряны)
git reset --hard HEAD^
Список веток
git branch
Список удаленных веток
git branch -r
Информация об удаленных ветках
git remote show origin
Создать новую ветку и перейти на нее
git checkout -b ветка
Объединить текущую ветку с указанной
git merge ветка
Если в обоих объединяемый ветках произошли изменения (commit) для их слияния будет создан новый commit, если изменений не было, то произойдет Fast Forward комит, то есть HEAD просто перейдет на последний комит. Удалить ветку
git branch -d ветка
Изменить последний комит (изменить примечание к нему)
git commit --amend -m «примечания»
Работа с удалёнными репазиториями добавить удаленный репазиторий
git remote add origin https://адресс/<имя репазитория>.git
или для использования SSH
git remote add origin git@github.com:пользователь/репазиторий.git
создать удаленный репазиторий на windows сетевом диске (флаг –bare говорит о том, что депозитарий не будет содержать рабочих файлов)
git init --bare --share
добавить удаленный репазиторий в сетевом диске
git remote add origin file:///z:/папка
просмотреть список удаленных репазиториев
git remote -v
отправить в удаленный репазиторий заданную ветку из локального репазитория
git push -u <имя удаленного репазитория> <ветка из удаленного репазитория>
или связать локальную ветку и отслеживаемую удаленную
git branch -u <удаленный репазиторий>/<удаленная ветка>
затем выполнить
git push
Скопировать удаленный репазиторий
git clone https://адресс/<имя репазитория>.git
Метки (tags) Метки используются для ссылок на определенные комиты С помощью меток можно к примеру отмечать версии релизов Просмотреть список меток
git tag
Добавить метку
git tag add имя
Удалить метку
git tag -d имя
Перенести метки в удаленный репазиторий
git push --tags
Deatached HEAD - состояние при котором состояние рабочей директории не соответсвует HEAD (после commit на какой либо предыдущий commit). Для выхода из такого состояния надо вернуться на текущий commit
git checkout master
Запомнить (спрятатть) состояние текущей рабочей директории в которой есть незакомиченые изменения (например, при необходимости сделать pull до комита новых изменений)
git stash
Восстановить сохраненные (спрятанные) изменения
git stash apply
rails new проект
cd проект
git remote add origin git@github.com:пользователь/репазиторий.git
git branch --set-upstream-to=origin/master master
git checkout -b develop
git push --set-upstream origin develop
В комите был сделан неверный комментарий - улучшить (ammend) комит новым коментарием
git commit --amend -m '<комментарий>'
Комит надо повторить с новыми изменениями - дополнить коммит новыми изменениями
git add .
git commit --amend
Отменить последний комит, оставить все изменения в файлах
git reset --soft HEAD^
Отменить последний комит, уничтожить все изменения в файлах
git reset --hard HEAD^
Отменить опубликованый комит
git revert хэш
git push
Был проиндексирован файл котрый не должен войти в коммит - вывести файл из проиндексированных (его изменения не войдут в последующий комит)
git reset HEAD файл
Были сделаны ненужные изменения в отслеживаемом файле - заменить файл в рабочей директории (незакомиченные изменения) на файл из репазитория (версия из последнего комита), то есть отменить изменения сделанные с файлом в рабочей директорией.
git checkout -- файл
или отменить изменения во всех отслеживаемых но не проиндексированных файлах
git checkout -- .
Удалить не отслеживаемые файлы
git clean -fd
где
git checkout -f
или ``` git r
Удалить все изменения в отслеживаемых файлах:
git reset --hard
Удаление файлов (файл будет удален и из файловой системы)
git rm файл
Можно удалить файл средствами ОС, а затем выполнить git rm файл Если удалено средствами ОС несколько файлов, то можно проиндексировать такие изменения командой
git add -u
Переименование (перемещение файлов)
git mv файл1 файл2