Skip to content
Alexander Akulich edited this page Nov 28, 2017 · 6 revisions

Git — это система контроля версий.

Установка и настройка

  1. Качаем и устанавливаем git: https://git-for-windows.github.io/

  2. Производим первоначальную настройку

  3. Применяем хорошую :-) конфигурацию

  4. Выбираем Notepad++ в качестве редактора для git

  5. Для 32-битных систем: git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

  6. Для 64-битных систем: git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Использование

Введение

Основы

Инструменты

Работа с несколькими репозиториями

git remote add <название репозитория> <адрес репозитория>
git remote add urfu https://github.com/UrFU-Programming/IsitMessenger.git

Теперь для того, чтобы принять изменения из urfu, можете сделать:

git pull --rebase urfu master

Для записи изменений:

git push urfu master:master

То есть, для дополнительных репозиториев нужно указывать ветки. Главная ветка (обычно, по-умолчанию) называется master.

При записи изменений вы можете указать, что хотите записать изменения из определённой локальной ветки в определённую удалённую. Для этого используется конструкция <локальная ветка>:<удалённая ветка>. В качестве ветки можно указывать определённые коммиты по их hash-id.

Конфигурация git

Полезные сокращения

git config --global alias.co checkout
git config --global alias.st status
git config --global alias.cp cherry-pick
git config --global alias.fpush "push --force"
git config --global alias.rcon "rebase --continue"

Разное

git config --global help.autocorrect 1
git config --global diff.indentheuristic true
git config --global diff.algorithm histogram
git config --global rebase.stat true

Применять с пониманием последствий

git config --global push.default simple
git config --global push.followtags true
git config --global rebase.autostash true
git config --global rerere.enabled true

FAQ

Как откатить текущую ветку до определённого коммита?

git reset --hard <commit-ish>

Что может быть ссылкой на коммит (commit-ish)?

  • Одиночная ревизия (полная или сокращённая)
    • 734713bc047d87bf7eac9674765ae793478c50d3
    • 734713
  • Ссылка на ветку (локальную или удалённую)
    • master
    • origin/master
  • Метка (локальная или удалённая)
    • v1.2
    • refs/tags/v1.2-alpha1
  • Именованный коммит
    • HEAD (текущий коммит в рабочей директории)
    • FETCH_HEAD (последний известный коммит, полученный с помощью git fetch или git pull)
    • ORIG_HEAD
    • CHERRY_PICK_HEAD (коммит, который в данный момент применяется командой cherry-pick)
  • Ссылка на родителя
    • <commit>^ (родитель коммита ''commit'')
    • <commit>^2 (второй родитель коммита ''commit''; ''commit'' должен быть коммитом слияния)
    • <commit>^^^ (родитель родителя родителя)
    • <commit>~10 (десятый предок коммита ''commit'')
    • Конкретные примеры:
    • HEAD^
    • HEAD^2
    • HEAD^^^
    • master~10
    • origin/dev~5
  • RefLog сокращение (что-то из истории HEAD)
    • HEAD@{5} (HEAD, который был пять действий назад)
    • master@{yesterday} (последний на вчерашний день коммит в ветку master)
    • HEAD@{2.months.ago}
  • Ссылка на коммит по описанию
    • ":/#123" (последний коммит с упоминанием с задачи 123)
    • :/^Fix (последний коммит, в описании которого есть строка, начинающаяся с Fix)
  • См. git help revisions