关键词:
Git
Зафиксированный - файл уже сохранён в вашей локальной базе
Изменённым - файлы, которые поменялись, но ещё не были зафиксированы
Подготовленные - это изменённые файлы, отмеченные для включения в следующий коммит.
Git directory working directory staging area
1 Вы вносите изменения в файлы в своём рабочем каталоге.
2 Подготавливаете файлы, добавляя их слепки в область подготовленных файлов.
3 Делаете коммит, который берёт подготовленные файлы из индекса и помещает их в каталог Git'а на постоянное хранение.
--global - файл .gitconfig в каталоге $HOME (C:\Documents and Settings\$USER или C:\Users\$USER для большинства пользователей)
указать ваше имя и адрес электронной почты
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
выбрать текстовый редактор, который будет использоваться
$ git config --global core.editor code
встроенная diff-утилита, которая будет использоваться для разрешения конфликтов слияния
git config --global merge.tool diffuse
проверить используемые настройки
$ git config --list
проверить значение конкретного ключа
$ git config user.name
открыть страницу руководства по любой команде
$ git help <команда> например $ git help config
начать использовать Git для существующего проекта
$ git init
добавить под версионный контроль существующие файлы
$ git add *.c
$ git add . $ git add --all
коммит
$ git commit -m 'initial project version'
клонирование существующего репозитория в каталог grit
$ git clone git://github.com/schacon/grit.git
клонирование существующего репозитория в каталог отличный от grit
$ git clone git://github.com/schacon/grit.git mygrit
для определения, какие файлы в каком состоянии находятся
$ git status
начать отслеживать (добавить под версионный контроль) новый файл или проиндексировать существующий
$ git add filename
git add -u подготовка удаленных файлов
файл .gitignore
*.[oa] - игнорировать любые файлы заканчивающиеся на .o или .a
*~ игнорировать все файлы заканчивающиеся на тильду (~)
Пример:
# комментарий — эта строка игнорируется
*.a # не обрабатывать файлы, имя которых заканчивается на .a
!lib.a # НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила
/TODO # игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO
build/ # игнорировать все файлы в каталоге build/
doc/*.txt # игнорировать doc/notes.txt, но не doc/server/arch.txt
doc/**/*.txt # игнорировать все .txt файлы в каталоге doc/
непосредственно добавленные и удалённые строки — собственно заплатку (patch).
(сравнивает содержимое вашего рабочего каталога с содержимым индекса)
$ git diff
посмотреть, что вы проиндексировали и что войдёт в следующий коммит
$ git diff --cached
эта команда сравнивает ваши индексированные изменения с последним коммитом
$ git diff --staged
$ git commit
Для ещё более подробного напоминания, что же именно вы поменяли
$ git commit -v
Комментарий для коммита в командной строке
$ git commit -m "Story 182: Fix benchmarks for speed"
заставляет Git автоматически индексировать каждый уже отслеживаемый на момент коммита файл
$ git commit -a
удалить его из отслеживаемых файлов (точнее, удалить его из вашего индекса)
$ git rm
принудительное удаление проиндексированного файла
$ git rm -f
это удалить файл из индекса
$ git rm --cached readme.txt
Эта команда удаляет все файлы, которые имеют расширение .log в каталоге log/
$ git rm log/\*.log
Эта команда удаляет все файлы, чьи имена заканчиваются на ~
$ git rm \*~
переименовать файл в Git
$ git mv file_from file_to
(эквивалентно
$ mv README.txt README
$ git rm README.txt
$ git add README)
список коммитов созданных в данном репозитории в обратном хронологическом порядке
$ git log
$ git log -p
$ git log --pretty=oneline
$ git log --pretty=oneline --max-count=2
$ git log --pretty=oneline --since='5 minutes ago'
$ git log --pretty=oneline --until='5 minutes ago'
$ git log --pretty=oneline --author=<your name>
$ git log --pretty=oneline --all
$ git log --all --pretty=format:"%h %cd %s (%an)" --since='7 days ago'
$ git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
что ограничит вывод до 2-х последних записей
$ git log -p -2
получить дельту по словам
$ git log -p --word-diff
получить некоторую краткую статистику по каждому коммиту
$ git log --stat
граф веток
$ git log --graph -all
$ git log --oneline --graph
--pretty=oneline выводит каждый коммит в одну строку, что удобно если вы просматриваете большое количество коммитов.
short, full, и fuller, практически не меняя формат вывода, позволяют выводить меньше или больше деталей
format:"%h - %an, %ar : %s" свой формат вывода лога
$ git log --pretty=format:"%h - %an, %ar : %s"
список коммитов, сделанных за последние две недели
$ git log --since=2.weeks
сделать этот коммит ещё раз
$ git commit --amend
пример - в результате один коммит
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
НЕ создает новый коммит а заменяет страый
git commit --amend -m "Add an author/email comment"
отмена индексации файл
$ git reset HEAD benchmarks.rb
Отмена изменений файла и возращение его к состоянию предыдущего коммита
$ git checkout -- benchmarks.rb
откат до коммита
$ git checkout <hash>
просмотреть, какие удалённые серверы у вас уже настроены
$ git remote
просмотреть, какие удалённые серверы у вас уже настроены и их URL
$ git remote -v
добавление нового удаленного репозитория
$ git remote add name url
извлечь (fetch) всю информацию, которая есть в репозитории
$ git fetch pb
$ git fetch [имя удал. сервера]
$ git fetch origin
автоматически извлекает и затем сливает данные из удалённой ветки в вашу текущую ветку
$ git pull
отправить (push) их в главный репозиторий
$ git push [удал. сервер] [ветка]
получить побольше информации об одном из удалённых репозиториев
$ git remote show origin
Просмотр имеющихся меток
$ git tag
поиск по шаблону
$ git tag -l 'v1.4.2.*'
Создание аннотированной метки, Опция -m задаёт меточное сообщение
$ git tag -a v1.4 -m 'my version 1.4'
посмотреть данные метки
$ git show v1.4
посмотреть данные коммита
$ git show b10cc123
Легковесная метка
$ git tag v1.4-lw
возможно помечать уже пройденные коммиты
$ git tag -a v1.2 -m 'version 1.2' 9fceb02
удаление тега
$ git tag -d v1-beta
отправляет метки на удалённые серверы
$ git push origin v1.5
все ваши метки отправятся на удалённый сервер
$ git push origin --tags
создадим новую ветку под названием testing
$ git branch testing
создать и перейти на ветку
$ git checkout -b style
перейти на существующую ветку
$ git checkout testing
откатить один файл до заданного коммита
$ git checkout 09bd8cc1 hello.txt
объединить эту ветку и свой master
$ git checkout master
$ git merge iss53
удалить ветку
$ git branch -d iss53
список веток, * указывает на ветку, на которой вы находитесь в настоящий момент.
$ git branch
посмотреть последний коммит на каждой из веток
$git branch -v
посмотреть те ветки, которые вы уже слили
ветки из этого списка, перед которыми нет символа *, можно смело удалять командой git branch -d
$git branch --merged
все ветки, содержащие наработки, которые вы пока ещё не слили в текущую ветку
$git branch --no-merged
просмотр всех веток, в том числе на удаленном репозитории
$ git branch -a
Команда изменяет текущую ветку. Переданный параметр - это просто указатель на новое начало коммитов.
Пересоздаются (копируются) коммиты из диапазона [BRANCH or SHA1]..HEAD .
$git rebase [BRANCH or SHA1]
пример
git checkout develop
git pull
git checkout feature/A/super_code
git rebase develop
Алиасы
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.hist "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.type 'cat-file -t'
git config --global alias.dump 'cat-file -p'
В файле .gitconf
[alias]
co = checkout
ci = commit
st = status
br = branch
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
type = cat-file -t
dump = cat-file -p
отмена коммита
$ git revert HEAD --no-edit - последнего коммита
отмена заданного коммита
$ git revert b10cc123
отмена коммитов до заданного тега
git reset --hard v1
Параметр --hard указывает, что рабочий каталог должен быть обновлен в соответствии с новым head ветки.
git reset --hard some-commit-hash — вернуться на определённый коммит в истории.
Все изменения, сделанные после этого коммита пропадут.
git reset some-commit-hash — вернуться на определённый коммит в истории.
Все изменения, сделанные после этого коммита, получат состояние «Not staged for commit».
Чтобы вернуть их обратно, нужно использовать команды git add и git commit.
git reset --soft some-commit-hash — вернуться на определённый коммит в истории.
Все изменения, сделанные после этого коммита, получат состояние «Staged for commit».
Чтобы вернуть их обратно, нужно использовать команду git commit.
Например чтобы взять три последних коммита и слить их в один большой коммит
git checkout forget-my-changes.js. Это как git reset --hard, только для конкретного файла.
Сравнить два файла
git diff some-branch some-filename.js
получение обновлений и ребейз
git pull --rebase
git push -f
git diff HEAD
git pull эквивалентно
git fetch
git merge origin/master
Добавьте локальную ветку, которая отслеживает удаленную ветку
git branch --track style origin/style
создание чистого репозитория для расшаривания
git clone --bare hello hello.git
добавление удаленного репозитория
git remote add shared ../hello.git
git remote add shared ../hello.git
git branch --track shared master
git pull shared master
git difftool -d
git config --global diff.tool meld
git diff -w - игнорировать пробелы
git config --global merge.tool meld
git branch -a - выводит все ветки, в том числе удаленные
git reflog изменения HEAD в хронологическом порядке
git log -g вывод лога для записей из reflog
rm -Rf .git/logs/ - удаление рефлога
git fsck - проверка целостности
git fsck --full показаны все объекты, недостижимые из других объектов