kbook


Project maintained by atilla777 Hosted on GitHub Pages — Theme by mattgraham
Git
Главная страница

Основные приемы работы c git

Начало работы

Создание рабочего каталога

mkdir папка

Инициализация (создание) репозиторий git в рабочем каталоге

cd папка
git init

или клонирование файлов из уже существующего git репозитория

git clone путь

где путь может быть:

История комитов

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) Вариант организации совместной работы:

  1. репазиторий клонируется разработчиками
  2. вносятся изменения
  3. отправляется запрос комитеру на принятие изменений
  4. комитер принимает изменения и включает их в основной репазиторий

    Основные приемы работы

    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 проекта на github (в проекте 2 ветки - master и develop)

    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
    

    где

    • -f # force
    • -d # не только файлы, но и папки Отменить непроиндексироанные (соответственно незакоммиченные) изменения:
      git checkout -f
      

      или ``` git r

Удалить все изменения в отслеживаемых файлах:

git reset --hard

Удаление файлов (файл будет удален и из файловой системы)

git rm файл

Можно удалить файл средствами ОС, а затем выполнить git rm файл Если удалено средствами ОС несколько файлов, то можно проиндексировать такие изменения командой

git add -u

Переименование (перемещение файлов)

git mv файл1 файл2