Очень подробное краткое руководство по Git и коллекция команд

Git GitHub удаленная работа SVN

Git(вики:en chs) — это бесплатная распределенная система управления версиями с открытым исходным кодом, разработанная автором ядра Linux Линусом Торвальдсом, большой проект с открытым исходным кодом.linux kernel,Android,chromium,mono,dotnet,UE4Используйте Git для управления проектами

ИзвестныйgithubВеб-сайт использует Git для размещения всего кода проекта, и код Git также размещен на github, ссылка:github.com/git

По сравнению с централизованными системами управления версиями (ПО с открытым исходным кодом: SVN; бесплатное ПО: CVS; коммерческое ПО: Microsoft VSS, IBM Rational ClearCase)

Преимущества Git:

① Локальный — это полное зеркало репозитория, поэтому он поддерживает работу в автономном режиме.

② Большинству операций требуется только доступ к локальным файлам и ресурсам, а каждая фиксация представляет собой полную копию всех файлов, что очень быстро



Примечание. Централизованные системы контроля версий, такие как SVN, сохраняют разницу между каждым файлом и исходной версией.



Примечание. Каждая фиксация Git представляет собой полную копию всех файлов, поэтому, когда Git откатывается к фиксации, он не будет выполнять дифференциальные вычисления и восстановление для всех файлов, поэтому скорость будет очень высокой.

③ Мощная и быстрая функция ветвления, очень подходящая для нелинейного процесса разработки

Недостатки Git:

① Его можно использовать только целиком, его нельзя обновлять или отправлять в подкаталогах и ветках.

② Подкаталоги и ветки не могут управляться по отдельности

③ Поскольку каждый коммит представляет собой полную копию всех файлов, он занимает больше места на диске.

Это делает исходный код, файлы конфигурации и т. д. более подходящими для управления Git, в то время как большие двоичные файлы, такие как ресурсы, могут легко привести к увеличению размера репозитория.

В проектной практике для больших двоичных файлов, таких как ресурсы, вы можете использоватьGit-LFSДля управления UE4 использует собственные разработанные GitDependencies для управления

основная концепция

Происхождение: имя удаленного репозитория по умолчанию

master: имя ветки по умолчанию

origin/master: имя удаленной ветки по умолчанию

HEAD: Псевдоним коммита вверху текущей ветки, то есть хеш-значение SHA-1 последнего коммита текущей ветки.

ORIG_HEAD: позиция последнего указателя HEAD. Примечание: при выполнении команды git reset/git pull/git merge git скопирует старый HEAD в файл .git/ORIG_HEAD.Вы можете использовать ORIG_HEAD для ссылки на этот коммит в последующих командах.

Фиксация (commit): каждая фиксация представляет собой полный снимок всех файлов и однозначно идентифицируется с помощью commitID (40-значное шестнадцатеричное хэш-значение SHA-1, вычисляемое на основе содержимого файла или структуры каталогов). С определенной точки зрения, Git поддерживает направленный ациклический граф идентификаторов коммитов.

detached HEAD: Состояние, в котором HEAD не указывает ни на какую ветвь. Обычно это происходит в следующих ситуациях:

① При использовании команды checkout для перехода к коммиту, на который не указывает ветвь

② Состояние, в котором rease обрабатывает конфликты

③ При переключении на кеш удаленной ветки

В Git при выполнении команды должно быть ясно: где ты? Кому исполняется этот приказ?

Версия git, используемая в этой статье: git version 2.13.0.windows.

Для запуска рекомендуется использовать командную строку: git bash (можно запустить через контекстное меню Git Bash здесь), на это есть три основные причины:

① При выполнении git log и других команд, которым необходимо отобразить несколько страниц контента в Windows cmd, это приведет к зависанию cmd (иногда вы не можете выйти, нажав клавишу Q)

② В git bash вы можете использовать командные инструменты, обычно используемые в среде Linux, которые поставляются с MinGW.

③ Раскраска git bash лучше подходит для чтения

Проиллюстрировать общие операции

Рабочий каталог: Рабочая область. Структура дерева каталогов на уровне операционной системы также может пониматься как объект дерева каталогов.

Стадия (индекс): область временного хранения, представляющая собой список файлов, ожидающих фиксации. Он реализован как плоский список файлов, но его также можно понимать как объект каталога дерева на уровне понимания.

Локальный репозиторий (история): Локальный репозиторий. Направленный ациклический граф, каждый узел которого является объектом каталога дерева.

Удаленный репозиторий: удаленный репозиторий. Направленный ациклический граф, каждый узел которого является объектом каталога дерева.



Примечание. Смысл шагов git checkout -- ①② на рисунке заключается в том, что при изменении области временного хранения изменения в области временного хранения предпочтительно используются для охвата рабочей области.

список сравнения команд svn

svn git иллюстрировать
svn checkout git clone Проверить товар
svn update

git fetch

git pull

возобновить
svn commit

git commit

git push

представить
svn add git add Добавить к
svn mv git mv переехать
svn rm git rm удалять
svn status git status Посмотреть статус
svn log git log Посмотреть журнал
svn diff git diff Посмотреть разницу
svn revert

git checkout

git reset

git revert

Отменить, отменить изменения
svn copy

git checkout -b/-B

git branch

Создать ветку
svn switch git checkout переключить ветку
svn copy git tag создать тег
svn merge

git merge

git rebase

слияние ветвей

механизм хранения файлов

Хранилище Git использует файловую систему с адресацией по содержимому, ядром которой является простая база данных "ключ-значение". Когда любой тип контента вставляется в базу данных, она возвращает 40-значное шестнадцатеричное значение. Хэш-значение SHA-1 используется как индекс.

В репозитории Git поддерживает следующие структуры данных: следующие четыре объекта и индексы, а также поддерживает и управляет редакцией и исторической информацией о проекте, сохраняя журнал журнала ациклического графа, ориентированного на commitID.

blob-- 1 большой двоичный объект содержит 1 версию данных 1 файла

tree-- Представляет каталог, в который записываются все хэш-значения файловых BLOB-объектов, имена подкаталогов с именами файлов и другие метаданные в каталоге. Создайте полную иерархию файлов и подкаталогов, рекурсивно ссылаясь на другие деревья каталогов.

commit-- 1 объект фиксации содержит метаданные каждого изменения в репозитории, каждый объект фиксации указывает на версию объекта дерева каталогов git.

tag-- Разделены на облегченные теги и теги аннотаций. Облегченный тег на самом деле является ссылкой на конкретный коммит, а тег аннотации — это полный проверяемый объект, хранящийся в git (хранящийся в .git/refs/tags), который также содержит имя тегировщика, адрес электронной почты, журналы, заметки и т. д. и т.п.

Git использует zlib для сжатия информации заголовка (тип объекта: большой двоичный объект или дерево или фиксация + 1 пробел + длина содержимого данных + 1 нулевой байт) и содержимого данных объекта, объединенных вместе в файл.

Сжатому файлу присваивается шестнадцатеричное хэш-значение SHA-1, и файл можно распаковать и просмотреть с помощью pigz.exe -dz скачать

40 шестнадцатеричное значение хеш-функции SHA-1 = sha1("blob/tree/commit" + размер файла + "\0" + данные), например: sha1("blob 7\0foobar\n") = "323fae03f4606ea9991df8befbb2fca795e648fa" Примечание: \n равно 0a в двоичном формате



Низкоуровневые команды — анализ объектов Git

find .git/objects -type f // Используйте команду find для просмотра всех файлов в каталоге .git/objects (рекурсивный подкаталог)

git rev-list --objects --all // Просмотр соответствия между хеш-значением SHA-1 всех объектов git и именем файла

git rev-list --objects --all | grep 83c4fbc43a6f187d4e8a247a1c9aced872b2315d // Просмотр имени файла с хэш-значением SHA-1 83c4fbc43a6f187d4e8a247a1c9aced872b2315d

echo "Hello World!" | git hash-object --stdin // Вычислить хеш-значение SHA-1 файла, содержимое которого — Hello World!

echo "Hello World!" | git hash-object -w --stdin // Вычислить хеш-значение SHA-1 файла, содержимое которого — Hello World!, и записать его в текущий локальный репозиторий git

git hash-object README.txt // Просмотр хэша SHA-1 файла README.txt

git hash-object -w README.txt // Просмотр хеш-значения SHA-1 файла README.txt и запись его в текущий локальный репозиторий git

git cat-file -p master^^{tree} // Просмотр хеш-значения SHA-1 каждого подкаталога (дерево-объект) и файла (BLOB-объект) в git-каталоге (дерево-объект) указателя HEAD ветки master

100644 blob 7abd3a56703ad4a7120571967f5d06607b5e5502 README.txt
040000 tree 9f448c40e684dc38109574007c661277c815fb7e ss

Примечание: 040000: указывает на каталог 100644: указывает на общий файл 100755: указывает на исполняемый файл 120000: указывает на символическую ссылку

git cat-file -p 7abd3a56703ad4a7120571967f5d06607b5e5502 // Просмотр содержимого файла, хеш-значение SHA-1 которого равно 7abd3a56703ad4a7120571967f5d06607b5e5502

git show 7abd3a56703ad4a7120571967f5d06607b5e5502 // Просмотр содержимого файла хэша SHA-1 7abd3a56703ad4a7120571967f5d06607b5e5502

git cat-file -t f3961f5 // Просмотр типа объекта фиксации f3961f5: отображать как фиксацию

git cat-file -p f3961f5 // Просмотр информации об объекте отправки f3961f5: включая каталог git (объект дерева), хэш-значение SHA-1 последнего отправленного объекта, а также информацию об авторе, дате и комментарии в время подачи

tree ead34240822030a3f71df4fc351057d80d7d83f8
parent 33d5bbc5d61b024aab5078e40548c4e3da808e0e
author nicochen <nicochen@tencent.com> 1537258258 +0800
committer nicochen <nicochen@tencent.com> 1537258258 +0800

123 desc txt

git cat-file -p tag1.0 // Просмотр информации о облегченном теге или теге аннотаций tag1.0

git cat-file tag tag1.0 // Просмотр информации тега аннотации tag1.0

git ls-tree ead34240822030a3f71df4fc351057d80d7d83f8 // Просмотр объекта файла большого двоичного объекта и объекта каталога дерева, содержащегося в объекте каталога дерева ead34240822030a3f71df4fc351057d80d7d83f8

git ls-tree HEAD // Просмотр объекта файла большого двоичного объекта и объекта каталога дерева, содержащегося в объекте каталога дерева, на который указывает HEAD

git verify-pack -v .git/objects/pack/pack-a9282552b62cbe3f255fbb20374695a17c1ba2a2.idx // Проверяем содержимое архива pack-a9282552b62cbe3f255fbb20374695a17c1ba2a2.pack

git update-index n.txt // Добавляем измененный файл n.txt в тестовую область

git update-index --add n.txt // Добавляем неотслеживаемый или измененный файл n.txt в промежуточную область

git update-index --add --cacheinfo 100644 5d11580eed65ffd34b6786274a60460b3582aa7d n.txt // Добавляем отслеживаемое или измененное состояние в промежуточную область n.txt, используя тип 100644, хеш-значение SHA-1 5d11580eed6ab65ffd34b463586262

git write-tree // Генерируем объект дерева из всей промежуточной области и выводим его хеш-значение SHA-1

echo "add n.txt" | git commit-tree 31b7ca405196ca9e8fb4d5404b315bef9f2c841f -p HEAD // Используйте объект дерева 31b7ca405196ca9e8fb4d5404b315bef9f2c841f, полученный git write-tree, для создания объекта фиксации, аннотированного как родительский объект фиксации, и добавьте n.oftxt текущий ГОЛОВА

git update-ref refs/heads/master 372aa8e425b57ca30e2974b8e7737133caaa0b7f // Если текущая ветка является master, обновите HEAD, чтобы указать на объект коммита 372aa8e425b57ca30e2974b8e7737133caaa0b7f, а затем используйте git log, чтобы увидеть запись коммита

git write-tree --prefix=ss // Создать объект дерева из содержимого каталога ss в промежуточной области и вывести его хеш-значение SHA-1

git update-ref -d refs/remotes/origin/v1.0 // удалить кеш удаленной ветки v1.0

git update-index --chmod=+x engine_mac.sh // Добавляем разрешения на выполнение в engine_mac.sh (требуется в системах Linux, Unix, Mac OS X)

список команд

Посмотреть справку по команде

git config --help // Посмотреть подробное использование команды git config

git help config // То же, что и выше

настроить

git config --global user.name "kekec" // настроить имя пользователя для фиксации
git config --global user.email "kekec@qq.com" // настроить информацию об электронной почте

git config --global core.editor vim // Настройте текстовый редактор по умолчанию, который вызывается, когда Git требуется ваш ввод

git config --global alias.st status // Настроить псевдоним st для статуса, чтобы git status можно было записать как git st

git config --list // Просмотр всей информации о конфигурации текущего хранилища (включая информацию, связанную с филиалом)

git config user.name // Просмотр информации об имени пользователя текущего хранилища

git config -e --global // Редактируем глобальный конфигурационный файл (в нем записаны имя пользователя и адрес электронной почты) Каталог: c:/users//.gitconfig

git config -e // Редактируем файл конфигурации текущего хранилища Каталог: .git\config

Создать репозиторий

git init // создать пустой репозиторий git в текущем каталоге

git init MyGame // Создать папку с именем MyGame в текущем каталоге, затем создать в ней пустой репозиторий git

Структура каталогов .git выглядит следующим образом:



хуки: хуки-скрипты, которые выполняются во время различных операций

info/exclude: то же, что и файл .gitignore (этот файл необходимо поместить в каталог того же уровня папки .git, его можно создать с помощью командной строки типа nul > .gitignore под окнами), он используется для фильтрация файлов. Разница в том, что файл не будет отправлен в репозиторий, поэтому фильтрация действует только локально и не влияет на другие.

# 忽略所有.so 结尾的文件
*.so
# 但 game.so 除外
!game.so
# 仅仅忽略项目根目录下的 README.md 文件,不包括 subdir/README.md
/README.md
# 忽略 .svn/ 目录下的所有文件
.svn/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

logs/refs/heads: записи журнала версий каждой локальной ветки.

logs/refs/remotes: записи журнала каждого удаленного кеша ветки

logs/refs/stash: Данные тайника

logs/HEAD: записи операций git

объекты: файловый индекс уровня 2 (разделить хеш-значение SHA-1 на: 2 бита + 38 бит), сохранить данные фиксации, данные файла BLOB-объектов и данные каталога дерева

objects/pack: пакетный файл представляет собой сжатые данные, в которых хранится фиксация, каталог дерева и файл большого двоичного объекта; файл idx представляет собой индекс каждого объекта данных в пакетном файле.

objects/info/packs: этот файл записывает список файлов пакетов для всех библиотек git.

refs/heads: каждая локальная ветка HEAD

refs/remotes: HEAD кэша каждой удаленной ветки

refs/tags: Информация о каждом теге аннотации.

COMMIT_EDITMSG: комментарии к последнему коммиту

config: информация о конфигурации, связанная с репозиторием

description: информация описания склада, используемая программой gitweb.

index: информация о временном хранилище

HEAD: указывает на самую последнюю фиксацию текущей ветки (например: ref: refs/heads/master)

ORIG_HEAD: при выполнении операции git merge/git pull/git reset HEAD предыдущей версии перед корректировкой на новое значение будет записан в OERG_HEAD для восстановления или отката предыдущего состояния.

FETCH_HEAD: git fech записывает HEAD всех извлеченных веток в .git/FETCH_HEAD.

MERGEHEAD: идентификатор коммита объединяется с HEAD

Packed-refs: кеш удаленного репозитория и кеш удаленного тега

журнал и статус файла

git reflog // Просмотр записей операций Примечание. Каждая запись операции идентифицируется HEAD@{n}

git show HEAD@{5} // Просмотр подробностей записи операции с индексом 5

git status // Просмотр файлов в тестовой области и рабочей области текущей ветки (будет отображаться текущая ветка)

Примечание 1: Состояние файла в staging area::staged (постановка); состояние файла в workspace::untrack (не отслеживается), модифицировано (изменено)

Примечание 2. Пустые каталоги в рабочей области не будут отслеживаться git.

git status -s --ignored // Просмотр файлов в тестовой области и рабочей области в компактном режиме (отображать все файлы, фильтрация файлов не выполняется)

git status -uno // Просмотр неотслеживаемых (неотслеживаемых) файлов состояния в тестовой области и рабочей области

git status -uall // Просмотр файлов состояния промежуточной области и рабочей области (рекурсивные подкаталоги показывают файлы внутри)

git log // Просмотрите запись коммита локального репозитория (будет отображаться текущая ветвь, на какую фиксацию какой ветки указывает указатель HEAD)

git log --stat // Просмотр записи коммита локального репозитория (будет отображаться текущая ветка, на какой коммит какой ветки указывает указатель HEAD, и краткая статистика изменений файлов для каждого коммита)

git log -- README.md // Просмотр записи фиксации локального репозитория файла README.md

git log --graph -- README.md // Графически просмотреть запись фиксации локального репозитория файла README.md

git log -p README.md // Просмотр записи фиксации локального репозитория файла README.md (показывает содержимое каждой модификации)

git log --grep "test" // показать коммиты с тестовой строкой в ​​комментариях

git log --author=kekec // Просмотр записей коммитов с автором kekec в локальном репозитории

git log -S "SplitPath (FString & str)" // Просмотр SplitPath (FString & str) при добавлении содержимого в проект в этих файлах go

git log --since=2.weeks // Просмотр записей коммитов за последние 2 недели

git log --since="2 недели 3 дня 2 часа 30 минут 59 секунд назад" // Просмотр записей коммитов 2 недели 3 дня 2 часа 30 минут 59 секунд назад

git log --after="2018-10-7" --before="2018-10-12" // Просмотр записи коммита между 2018.10.7~2018.10.12

git log --since="2018-10-7" --until="2018-10-12" // То же, что и выше: git log --after="2018-10-7" --before="2018- 10 -12"

Примечание: флаги --since, --until и флаги --after, --before эквивалентны соответственно.

git whatchanged README.md // Просмотр записи фиксации локального репозитория файла README.md (включая изменения имени файла)

git log --follow README.md // То же, что и выше: git whatchanged README.md

git log -3 // Просмотр последних 3 записей фиксации локального репозитория

git log -3 --pretty --oneline // Просмотр последних 3 записей фиксации локального репозитория (краткий режим, одна фиксация в строке)

git log --graph --oneline // Просмотр записи фиксации текущей ветки локального репозитория в графическом и кратком режиме

git log release --graph --oneline // Просмотр записи фиксации ветки релиза в локальном репозитории в графическом и кратком виде

git log --graph --oneline --no-merges // Просмотр записей фиксации текущей ветки локального репозитория в графическом и кратком режиме (фильтрация объединенных коммитов)

git log --graph --oneline --merges // просмотреть графически простую модель текущей ветки локального репозитория для отправки записей (показать только два или более узлов, отправленных отцом)

git log --graph --oneline --name-only // Просмотр записи фиксации локального репозитория текущей ветки в графическом сжатом режиме (и отображение списка имен файлов для каждой фиксации)

git log --graph --oneline --name-status // Просмотр записи фиксации текущей ветки локального репозитория в графическом и кратком режиме (и отображение статуса файла и списка имен каждой фиксации)

git log --graph --oneline --stat // Просмотр записи отправки текущей ветки в локальный репозиторий в графическом и кратком режиме (и отображение статистики изменений файлов, имен файлов, а также записей добавлений и удалений каждой отправки)

git log --graph --oneline --shortstat // Просмотр записи фиксации текущей ветки в локальном репозитории в графическом и кратком режиме (и отображение статистики изменения файла, а также записей добавления и удаления каждой фиксации)

git log --graph --oneline --decorate --all // Просмотр дерева коммитов локального репозитория всех веток в графическом и кратком режиме

git log --graph --pretty=format:"%H - %an, %ad : %s" // Пользовательский формат для графического просмотра дерева коммитов локального репозитория всех ветвей

%H Полная хэш-строка объекта фиксации (фиксация)
%h короткая хеш-строка объекта фиксации
%T полная хеш-строка объекта дерева (дерево)
Короткая хэш-строка объекта дерева %t
%P Полная хэш-строка родительского объекта (parent)
%p короткая хеш-строка родительского объекта
%имя автора
% AE Автор электронной почты адрес
Дата редакции %ad author (можно настроить с помощью параметра --date=)
%ar Дата редакции автора, как давно
%cn Имя отправителя
%ce Адрес электронной почты отправителя
Дата фиксации %cd
%cr Дата фиксации, как давно
Инструкции по отправке %s

git log master..v5.0 // Просмотр списка записей коммитов, которые ветвь v5.0 еще не объединила с основной веткой

git log v5.0..master // Просмотр списка записей коммитов, которые ветвь master еще не объединила с веткой v5.0

git log master...v5.0 // git log master..v5.0 + git log v5.0..master

git shortlog -sn // Подсчитываем количество коммиттеров

git виноват README.md // Показать информацию о последней модификации README.md

git show 3a6c702376168aa15a2f3d7bc98000d07a70d023 README.md // Просмотр изменений, представленных 3a6c702376168aa15a2f3d7bc98000d07a70d023, в файле README.md

git show HEAD // Просмотр последних изменений фиксации

git show --name-only HEAD // Просмотр списка файлов последней фиксации (не отображать содержимое конкретной модификации)

Теги (просмотреть/создать/переключить/удалить)

git tag // список всех тегов

git tag -l 'tag1*' // Список всех тегов, начинающихся с tag1

git tag tag1.0 // Создаем легковесный тег с именем tag1.0

git tag -a tag1.0 -m "tag1.0 desc" // добавить комментарий tag1.0 desc и создать тег примечания с именем tag1.0

git tag tag2.0 abffefc5d82078cbaea7fcbb5106ab0c21cbeba9 // Создаем облегченный тег с именем tag2.0 при фиксации abffefc5d82078cbaea7fcbb5106ab0c21cbeba9

git tag -a tag2.0 -m "tag2.0 desc" abffefc // Создаем тег примечания с именем tag2.0 при фиксации abffefc

git tag -d tag2.0 // удалить тег с именем tag2.0

git show tag1.0 // Просмотр информации, связанной с tag1.0

git ls-remote --tags // Просмотреть все удаленные теги

Ветка (просмотреть/создать/переключить/удалить)

git branch // список всех локальных веток

git branch -r // список всех кешей удаленных веток

git branch -a // Список всех локальных веток и кэшей удаленных веток

git branch -av // Список всех локальных веток и кэшей удаленных веток (с кратким описанием)

git branch -vv // Просмотр отношения отслеживания между всеми локальными ветвями и кэшами удаленных ветвей

git branch v1.0 // Создать ветку с именем v1.0 под указателем HAED текущей ветки (она не переключится на ветку v1.0 после создания)

git branch --track v1.0 origin/v1.0 // Если ветка v1.0 не существует, сначала создайте новую, а затем установите отношения отслеживания с удаленной веткой origin/v1.0 ① Удаленная ветка origin/v1.0 должен существовать, иначе выполнение команды завершится ошибкой ② Выполнение не переключится на ветку v1.0

git branch v2.0 372aa8e425b57ca30e2974b8e7737133caaa0b7f // Создайте ветку с именем v2.0 при фиксации 372aa8e425b57ca30e2974b8e7737133caaa0b7f (после создания она не будет сокращена до ветки v2.0)

git branch -m v1.0 x1.0 // переименовать ветку v1.0 в x1.0

git checkout v1.0 // Переключиться на ветку v1.0 (выполнение команды завершается ошибкой, если ветки v1.0 не существует)

git checkout -b v1.0 // Создать и переключиться на ветку v1.0 (выполнение команды завершается ошибкой, если ветка v1.0 существует)

git checkout -B v1.0 // Создать, если он не существует, и переключиться на ветку v1.0

git checkout -b v1.0 5a95f2d // Создаем при фиксации 5a95f2d и переключаемся на ветку v1.0

git checkout -b v1.0 tag1.0 // Создать и переключиться на ветку v1.0 по тегу tag1.0

git checkout -t origin/v1.0 // Создать и переключиться на локальную ветку с именем v1.0 в кеше удаленной ветки origin/v1.0 и установить отношения отслеживания между ними (если локальная ветка v1.0 существует , выполнение команды не выполняется )

git checkout -b x1.0 -t origin/v1.0 // Создать и переключиться на локальную ветку с именем x1.0 в кэше удаленной ветки origin/v1.0 и установить связь отслеживания между ними (локальная ветка x1 .0 Если он существует, выполнение команды не выполняется)

Примечание 1. Перед переключением веток необходимо обработать модификацию рабочей области (неотслеживаемые файлы не требуют обработки) и область временного хранения для успешного переключения.

Примечание 2. После успешного переключения рабочая область будет настроена на содержимое ветки.

Примечание 3. Отправка в кеш удаленной ветки не допускается, вам необходимо создать соответствующую локальную ветку, а затем отправить в локальную ветку.

git checkout -f v1.0 // Принудительно переключиться на ветку v1.0, отменив все изменения файлов в тестовой области и рабочей области (неотслеживаемые файлы в рабочей области не затрагиваются)

git checkout -f -B v1.0 origin/v1.0 // Создать, если он не существует, принудительно переключиться на ветку v1.0, отменить все изменения файлов в тестовой области и рабочей области и указать HEAD на origin/ At v1 .0 (неотслеживаемые файлы в рабочей области не затрагиваются)

git checkout - // переход на предыдущую ветку

git branch -d v2.0 // удалить ветку с именем v2.0 (перед удалением необходимо переключиться на другую ветку)

git branch -D v2.0 // Принудительно удалить ветку с именем v2.0 (вы должны переключиться на другую ветку, прежде чем сможете ее удалить)

git branch -dr origin/v2.0 // удалить кеш удаленной ветки origin/v2.0

файл (добавить/удалить/фиксировать/отменить)

git add README.md // Добавляем файл README.md из текущего каталога в тестовую область

git add . // Добавляем все файлы в текущем каталоге (рекурсивные подкаталоги) в промежуточную область

git add -u . // Добавляем все отслеживаемые файлы в текущем каталоге (рекурсивные подкаталоги) в промежуточную область

git add Doc/\*.txt // Добавляем все файлы с суффиксом txt в папку Doc (рекурсивный подкаталог) текущего каталога в область временного хранения

git rm README.md // Удалите файл рабочей области и поместите это удаление в тестовую область (если README.md будет изменен в рабочей области или тестовой области, команда не будет выполнена)

git rm -f README.md // Принудительно удалить файл рабочей области и поместить это удаление в промежуточную область (даже если README.md будет изменен в рабочей области или промежуточной области, операция удаления будет выполнена)

git rm --cached README.md // Не удаляйте файл, соответствующий рабочей области, только удалите README.md и поместите его в промежуточную область для отправки

git mv README.md test.md // Переименуйте README.md в test.md и поместите его в тестовую область.

git commit -m "desc" // Добавляем комментарий desc и фиксируем все изменения в промежуточной области в локальном репозитории

git commit README.md -m "desc" // Добавляем комментарии описания и отправляем изменения в README.md в промежуточной области в локальный репозиторий

git commit --amend -m "desc" // Добавить комментарий описания и использовать текущий коммит для перезаписи предыдущего коммита (если предыдущий коммит содержит модификации 1.txt и 2.txt, текущий коммит содержит только модификацию из 1.txt; выполнить После команды локальным репозиторием является текущий 1.txt и последний 2.txt). Если нет отправленного контента, он используется для перезаписи информации журнала последней отправки.

git commit -m "desc" --amend README.txt // Добавить комментарий описания, чтобы перезаписать предыдущую фиксацию текущей фиксацией в README.txt

git commit -a -m "desc" // Добавляем комментарий desc и фиксируем все изменения в рабочей и тестовой области в локальном репозитории

git commit -am "desc" // то же, что и выше

git commit -c b5cad94d229e72bd7aff5fe2c6f022b29c30e7a8 // Возьмите информацию, отправленную 372aa8e425b57ca30e2974b8e7737133caaa0b7f, чтобы зафиксировать текущую ревизию

git reset -- README.md // Отменить модификацию файла README.md в тестовой области

git reset README.md // Функция такая же, как и выше, отбросить модификацию файла README.md в тестовой области

git reset b5cad94 README.md // Перезаписать README.md в промежуточной области версией README.md при фиксации локального репозитория b5cad94

git reset // Отменить все изменения файлов в тестовой области (рабочая область не затрагивается)

git reset --mixed // --mixed — параметр по умолчанию, команда аналогична приведенной выше git reset

git reset --hard // Отменить изменения во всех файлах в тестовой области и рабочей области (неотслеживаемые файлы в рабочей области не затрагиваются)

git reset --soft b5cad94d229e72bd7aff5fe2c6f022b29c30e7a8 // указать только HEAD текущей ветки на 372aa8e425b57ca30e2974b8e7737133caaa0b7f commit (изменения всех файлов в тестовой и рабочей области не отбрасываются)

git reset --soft HEAD~ // Указываем только HEAD текущей ветки на последний коммит (модификации всех файлов в промежуточной и рабочей области не отбрасываются)

git reset --soft HEAD~2 // Указываем только HEAD текущей ветки на два последних коммита (модификации всех файлов в промежуточной и рабочей области не отбрасываются)

git reset --merge // откат слияния или извлечения в загрязненной рабочей области

$ git pull                         (1) 
Auto-merging nitfol 
Merge made by recursive. 
nitfol                |   20 +++++---- 
... 
$ git reset --merge ORIG_HEAD      (2)

(1) Даже если вы изменили часть своего рабочего пространства локально, вы можете безопасно использовать git pull, при условии, что вы знаете, что извлекаемый контент не перезапишет содержимое в вашем рабочем пространстве.

(2) После git pull вы обнаружите, что вас не устраивают изменения, сделанные в этом пуле.Если вы хотите вернуться к состоянию до пула, мы можем выполнить git reset --hard ORIG_HEAD, но эта команда имеет побочный эффект очистки вашей рабочей зоны, т. е. сброс ваших локальных изменений, которые не были добавлены.

Чтобы избежать сброса содержимого рабочей области, вы можете использовать git reset --merge ORIG_HEAD, обратите внимание, что --hard заменяется на --merge, чтобы вы могли избежать очистки рабочей области при откате.

git reset --keep // сохранить рабочее пространство и отменить некоторые предыдущие коммиты

Предположим, вы редактируете какие-то файлы, сделали коммит и продолжаете работать, но теперь понимаете, что то, что сейчас находится в рабочей области, должно принадлежать другой ветке, не имеющей ничего общего с предыдущим коммитом. В этот момент можно открыть новую ветку и сохранить содержимое рабочей области.

$ git tag start 
$ git checkout -b branch1 
$ edit 
$ git commit ...                            (1) 
$ edit 
$ git checkout -b branch2                   (2) 
$ git reset --keep start                    (3)

(1) На этот раз отправляются изменения в ветке 1.

(2) В это время было обнаружено, что предыдущее представление не принадлежало этого филиала. В это время филиал Friendly2 был вновь создан и переключен на фиксацию2.

(3) На данный момент вы можете отправить очищенные с помощью сброса - шевелей после начала, но сохраняйте рабочую зону без изменений.

git checkout -- README.md // -- Символ очень тяжелый, иначе он становится переключением на ветку README.md

// Когда файл README.md изменен в тестовой области, используйте изменения в тестовой области, чтобы перезаписать README.md в рабочей области

// Когда README.md отсутствует в промежуточной области, перезапишите README.md в рабочей области изменениями по указателю HEAD в локальном репозитории

git checkout -- . // Используйте промежуточную область и локальный репозиторий для восстановления всех файлов в текущем каталоге (рекурсивный подкаталог) Примечание. Если в промежуточной области есть изменения, сначала используется промежуточная область

git checkout HEAD README.md // Перезаписать README.md в тестовой области и рабочей области фиксацией в HEAD в локальном репозитории

git checkout 9a387f22ff949fa16336508adc2284384bd6a890 README.md // Используйте 9a387f22ff949fa16336508adc2284384bd6a890 в локальном репозитории для изменения и перезаписи README.md в тестовой и рабочей области

GIT Checkout -b v2.0 tag2.0 // Согласил Tag2.0, отправленный при создании и переключении на ветку V2.0 (Flate Access V2.0 выполнение команды не удалось)

git revert --no-edit 3a6c702376168aa15a2f3d7bc98000d07a70d023 // Откатить коммит 3a6c702376168aa15a2f3d7bc98000d07a70d023, а затем зафиксировать в локальном репозитории

git revert HEAD~ // Откатить последнюю фиксацию HEAD, после чего появится комментарий редактирования среды vim (введите: q, чтобы напрямую использовать содержимое комментария по умолчанию, введите: q! Отменить модификацию и использовать содержимое комментария по умолчанию, введите: x или: wq, чтобы сохранить текущий измененный контент комментария), а затем отправьте его на локальный склад.

git revert -n HEAD~3 // Откат фиксации в HEAD~3, а не автоматическая фиксация в локальном репозитории

git revert -n HEAD~2..HEAD // Откатить 2 фиксации между (HEAD~2, HEAD), не выполнять автоматическую фиксацию в локальном репозитории

Примечание: git reset перемещает HEAD назад, чтобы удалить коммиты, в то время как git revert откатывает предыдущие коммиты с новым коммитом (HEAD будет двигаться дальше)

Посмотреть разницу

git diff README.md // Просмотр разницы между рабочей областью и промежуточной областью README.md в текущем каталоге

git diff --cached README.md // Просмотр разницы между README.md в текущем каталоге и последней фиксацией в промежуточной области и локальном хранилище

git diff --cached 372aa8e425b57ca30e2974b8e7737133caaa0b7f README.md // Просмотр разницы между README.md в текущем каталоге в тестовой области и коммитом 372aa8e425b57ca30e2974b8e7737133caaa0b7f в локальном репозитории

git diff HEAD README.md // Просмотр разницы между файлом README.md в текущем каталоге, отправленным по указателю HEAD рабочей области и локального хранилища

git diff 372aa8e425b57ca30e2974b8e7737133caaa0b7f README.md // Просмотр разницы между README.md в рабочей области и коммитом 372aa8e425b57ca30e2974b8e7737133caaa0b7f в текущем каталоге

git diff 372aa8e425b57ca30e2974b8e7737133caaa0b7f HEAD README.md // Просмотр разницы между README.md в текущем каталоге и последней фиксацией по адресу 372aa8e425b57ca30e2974b8e7737133caaa0b7f в локальном репозитории

git diff 372aa8e425b57ca30e2974b8e7737133caaa0b7f HEAD // Просмотр разницы между коммитом 372aa8e425b57ca30e2974b8e7737133caaa0b7f и последним коммитом в локальном репозитории

git diff 372aa8e b5cad94 README.md // Просмотр разницы между README.md в текущем каталоге в фиксации 372aa8e и фиксацией b5cad94 в локальном репозитории

Примечание. Вы можете заменить git diff на git difftool, чтобы использовать внешний инструмент сравнения (вы можете настроить вне сравнения в качестве difftool по умолчанию и инструмента слияния в файле c:/users//.gitconfig) для просмотра различий.

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = "\"e:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""

слияние ветвей

git merge-base Master Feature // Просмотр оптимального общего родительского узла фиксации веток Master и Feature

git merge Feature // Слияние ветки Feature с текущей веткой Master (отправить напрямую, если нет конфликта)

git merge -m "merge test" Feature // Слияние ветки Feature слиянием с текущей веткой Master (используйте комментарий к тесту слияния для отправки напрямую, если нет конфликта)

git merge --no-commit Feature // Слияние ветки Feature с текущей веткой Master (не фиксируется автоматически)

git rebase Feature // перебазировать ветки Feature, объединенные в текущую ветку Master

Примечание 1: git rebase сначала найдет общий узел-предок, вырежет все записи фиксации ветки Feature из узла-предка, а затем объединит их в ветку Master (идентификатор фиксации будет другим до и после слияния).

Примечание 2: Условно говоря, git merge обрабатывает конфликты более непосредственно, но он добавит некоторые избыточные записи коммитов; в то время как git rebase может обеспечить четкие и линейные записи коммитов, но это также делает операцию слияния не записываемой.

Примечание 3. Лучше всего использовать git rebase для слияния удаленной ветки с локальной и git merge для слияния ветки Feature с веткой Master.

Примечание 4. Перед слиянием ветки Feature с веткой Master обязательно выполните команду git pull -r origin Feature, чтобы перебазировать удаленную ветку и локальную ветку.

Примечание 5: Файл в состоянии конфликта (конфликт) — UU (вы можете найти его через git status -s --ignored), после ручной обработки конфликта, затем используйте git add файл и, наконец, продолжайте выполнять git merge/ rebase --continue для завершения фиксации слияния

Примечание 6. Конфликтующее содержимое файла README.md выглядит следующим образом.

<<<<<<< HEAD
123 456 789 000 111 222 333 444 555 сс // содержимое текущей ветки
=======
123 456 789 000 сс тт // Содержание ветки Feature
>>>>>>> Feature

Примечание 7. Вы можете использовать git mergetool для использования внешнего инструмента слияния (вы можете настроить вне сравнения как инструмент слияния по умолчанию в файле c:/users//.gitconfig) для обработки конфликтов.

После изменения текущего файла вы можете снова вызвать git mergetool, чтобы справиться со следующим конфликтом, пока все не будут устранены, затем используйте git add файл и, наконец, продолжайте выполнять git merge/rebase --continue для завершения отправки слияния.

[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    cmd = "\"e:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""

git rebase /i Feature // Вручную в интерактивном режиме перебазируйте ветку Feature в текущую ветку Master

pick 07c5abd Introduce OpenPGP and teach basic usage

pick de9b1eb Fix PostChecker::Post#urls
pick 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

git merge/rebase --abort // отменить текущую операцию слияния или перебазирования

git merge/rebase --skip // Принудительно использовать содержимое ветки Feature

git merge/rebase --continue // Используйте git add файл после ручной обработки конфликта и, наконец, продолжайте выполнять git merge/rebase --continue для завершения отправки слияния

git merge origin/master // После извлечения вы можете объединить главную ветку кэша удаленной ветки в текущую ветку

git rebase origin/master // После извлечения вы можете объединить основную ветку кеша удаленной ветки в текущую ветку

git rebase --onto master 76cada~ // Слить текущую ветку из ebase коммита сегмента [76cada, HEAD] в master

git cherry-pick 9a341e // Объединить коммит 9a341e в текущую ветку. Если конфликта нет, напрямую используйте информацию фиксации 9a341e для фиксации, в противном случае вы должны сначала выполнить обработку конфликта, а затем продолжить выполнение git cherry-pick --continue для завершения работы по объединенной отправке.

git cherry-pick 371c2…971209 // объединить коммит (371c2, 971209] в текущую ветку (каждый коммит создает коммит в текущей ветке)

git cherry-pick 371c2~…971209 // объединить фиксацию [371c2, 971209] в текущую ветку (каждая фиксация создает фиксацию в текущей ветке)

git cherry-pick -n 9a341e d2f99e // Объединить коммиты 9a341e и d2f99e в текущую ветку (не коммитить), после этого вам нужно будет коммитить вручную

git cherry-pick --abort // отменить текущую операцию выбора вишни

git cherry-pick --quit // Очистить текущий статус операции, принудительно завершить процесс операции cherry-pick без отмены изменений

git cherry-pick --continue // После ручной обработки конфликта, наконец, продолжайте выполнение git cherry-pick --continue для завершения объединенного коммита

Посмотреть удаленный репозиторий

git remote -v // Показать URL-адрес удаленного хранилища. Примечание. Поскольку git распространяется, все удаленные хранилища могут иметь

origin https://github.com/kekec/Test.git (fetch)
origin https://github.com/kekec/Test.git (push)

git remote-ls // Просмотр URL-адреса удаленного репозитория и информации о ветке

From https://github.com/kekec/Test.git
fae0fc82d711425daa897a63137d7e1af09512ba HEAD
fae0fc82d711425daa897a63137d7e1af09512ba refs/heads/master

git remote // Посмотреть имя удаленного склада, обычно источник

git remote rename origin test // Изменяем имя удаленного репозитория с origin на test

git remote show origin // Показать информацию об удаленном складе

* remote origin
Fetch URL: https://github.com/kekec/Test.git
Push URL: https://github.com/kekec/Test.git
HEAD branch: master
Remote branches:
master tracked
v3.1 tracked
Local branch configured for 'git pull':
master merges with remote master
Local refs configured for 'git push':
master pushes to master (fast-forwardable)
v3.1 pushes to v3.1 (up to date)

git remote rm origin // Удаляем информацию об удаленном источнике, добавленную в файл .git/config

git remote add origin https://github.com/kekec/Test.git // Добавляем URL-адрес удаленного хранилища, на который указывает удаленный источник, в файле .git/config (если он уже существует, выполнение команды завершается ошибкой)

[remote "origin"]
    url = https://github.com/kekec/Test.git
    fetch = +refs/heads/*:refs/remotes/origin/*

git remote set-url origin https://github.com/kekec/Test.git // Измените файл .git/config, чтобы добавить URL-адрес удаленного хранилища, на который указывает удаленный источник

git remote prune origin // Для веток, которых нет в удаленном хранилище, очищаем соответствующий кеш удаленных веток

Дистанционное управление

git clone https://github.com/kekec/Test.git // Клонируем текущую ветку на https://github.com/kekec/Test.git в локальную (будет создана директория с именем Test, имя удаленный склад будет использовать исходное имя по умолчанию)

git clone https://github.com/kekec/Test.git MyProject // Клонировать текущую ветку на https://github.com/kekec/Test.git в локальную (будет создан каталог с именем MyProject, удаленный склад Имя использует происхождение имени по умолчанию)

git clone -b v1.0 https://github.com/kekec/Test.git // Клонировать ветку v1.0 на https://github.com/kekec/Test.git в ваш локальный каталог. Для тестового каталога имя удаленного склада использует происхождение имени по умолчанию)

git clone -b v1.0 https://github.com/kekec/Test.git d:\MyGame // Клонировать ветку v1.0 на https://github.com/kekec/Test.git в d:\ Каталог MyGame (каталог с именем Test будет создан в d:\MyGame, а имя удаленного склада использует исходное имя по умолчанию)

git clone -o TestPrj https://github.com/kekec/Test.git // Клонировать текущую ветку на https://github.com/kekec/Test.git в локальную (создаст каталог с именем Test и установите имя удаленного репозитория TestPrj)

git fetch origin master // Извлечь информацию об изменении состояния основной ветки из удаленного хранилища (файл рабочей области не будет обновляться)

git fetch // Извлечь все изменения статуса ветки и тега из удаленного репозитория (файлы рабочей области не будут обновляться)

git fetch -p // Извлечь все изменения статуса ветки и тега из удаленного репозитория и очистить локальный кеш от удаленных удаленных веток и тегов (файлы рабочей области не будут обновлены)

git fetch origin --tags // Перетаскиваем все теги из удаленного репозитория в локальный (файлы рабочей области обновляться не будут)

git pull :

git pull origin master // Сначала выполнить fetch, затем объединить удаленную ветку origin/master с текущей веткой (наконец, указатели origin/master, origin/HEAD будут обновлены до последней фиксации)

Git pull https://github.com/kekec/test.git master // Сначала выполните FETCH, объедините удаленную ветку Origin/Master с текущей веткой (наконец, не обновляйте указатель Origin/Master, Origin/Head на последнюю отправку )

git pull origin v1.0:master // Сначала выполнить выборку, затем объединить удаленную ветку origin/v1.0 с локальной веткой master

git pull origin // Сначала выполните выборку, а затем объедините соответствующую удаленную ветку слиянием с текущей веткой (текущая ветка должна предварительно сохранить отношения отслеживания удаленной ветки)

git pull // Сначала выполните выборку, а затем объедините соответствующую удаленную ветку слиянием с текущей веткой (текущая ветка должна предварительно хранить отношения отслеживания удаленной ветки, а текущая ветка имеет только один удаленный склад)

git pull -p // Сначала выполнить выборку, затем объединить соответствующую удаленную ветку слиянием с текущей веткой и очистить локальный кеш удаленной удаленной ветки и тега

git pull -r origin master // Сначала выполнить выборку, затем объединить удаленную исходную/главную ветку rebase в основную ветку

git push :

Git Push -U Origin Master // Нажмите модификацию локального склада в главную ветку URL-адреса удаленного хранилища, ориентированного на исходное происхождение, и записывать соответствие между текущей ветвкой и удаленным ветвей в файле .git / config

git push origin // отправить обновление текущей ветки в соответствующую удаленную ветку

git push // Отправляем обновление текущей ветки в соответствующую удаленную ветку (текущая ветка имеет только один удаленный склад, вы можете опустить происхождение имени склада)

git push origin -f // Принудительно перезаписать соответствующую удаленную ветку обновлением текущей ветки (при возникновении конфликта в объединенной удаленной ветке текущая ветка также обновляется)

git push origin v1.0 // Отправляем обновление локальной ветки v1.0 в соответствующую удаленную ветку remotes/origin/v1.0

git push origin --all // Отправляем все обновления локальных веток в соответствующие удаленные ветки

git push origin tag1.0 // Обновить локальный тег tag1.0 до удаленного тега tag1.0

git push origin --tags // Обновить все локальные теги до соответствующих удаленных тегов

git push origin :v1.0 // удалить удаленную ветку v1.0

git push origin :refs/tags/tag1.0 // удалить удаленный тег tag1.0

git push origin -d v1.0 // удалить удаленную ветку v1.0 Функция такая же, как и выше

зона хранения

git stash // Отправляем измененную резервную копию всех файлов в рабочей области в область хранения, а затем отбрасываем изменения всех файлов в рабочей области и в области подготовки

git stash pop // Используйте резервную копию на вершине стека (stash@{0}), чтобы восстановить рабочую область текущей ветки и удалить резервную копию на вершине стека

git stash apply stash@{1} // Используйте резервную копию (stash@{1}) ниже верхней части тайника, чтобы восстановить рабочую область текущей ветки, но не удаляйте резервные копии в тайнике

git stash list // Просмотр списка тайников области тайника

git stash show -p stash@{0} // Просмотр содержимого каждого файла в резервной копии в верхней части стека в области хранения

git stash drop // напрямую удалить резервную копию в верхней части стека области хранения (не используется для восстановления рабочей области текущей ветки)

git stash clear // очистить список стека тайника

Рабочее пространство

Git Clean -nd // Обнаружено, какие файлы и каталоги (безвредимое состояние) в рабочем пространстве будут удалены

git clean -fd // удалить неотслеживаемые файлы и каталоги в рабочей области

кеш хранения

git ls-files // Запрос списка файлов в промежуточной области (рекурсивные подкаталоги)

git ls-files -s // Просмотр сведений о блоках данных BLOB-объектов обо всех файлах в промежуточной области

git ls-files -s -- README.md // Просмотр информации о блоке данных большого двоичного объекта файла README.md в области подготовки

другие команды

Git fsck --full // список всех uncapsuil BLOB, Tree, Commit object

git archive --format zip --output d:/file.zip master // Упакуем все файлы текущей ветки master в d:/file.zip, используя сжатие zip

Git для похудения

git count-objects -v // Просмотр статистики объектов git

find .git/objects -type f -print0 | xargs -0 du -hk | sort -nr | head -5 // Найдите 5 самых больших файлов в библиотеке git (k в du -hk представляет собой единицу измерения в КБ)

find .git/objects -type f -size +1M -print0 | xargs -0 du -hm | sort -nr | head -5 // Найдите 5 самых больших файлов в библиотеке git, размер которых превышает 1M (du -hm в k представляет единицу измерения МБ)

git verify-pack -v .git/objects/pack/pack-b340eea7566df839294b71ec91a327ca2ece0b94.idx | sort -k 3 -nr | head -5 // Найдите 5 самых больших файлов в сжатом репозитории git

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FramePro.cpp' --prune-empty --tag-name-filter cat -- --all // из репозитория git Полностью очистить FramePro.cpp от истории

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin // очистить все устаревшие ссылки ref

git gc --prune=now // ① Сожмите все объекты в двоичный файл пакета, чтобы сэкономить место и повысить эффективность ② Удалите устаревшие объекты, которые не связаны с какими-либо фиксациями

git reflog expire --expire=now --all // очистить весь журнал операций

Помимо использования нативных команд git, можно использовать специальные инструментыBFG(реализация Java), чтобы уменьшить библиотеку Git

Классический Gitflow


(1) Основная ветвь хранит историю официальных выпусков (всем отправкам в основной ветке присваивается номер версии)

(2) Ветка разработки используется как интегрированная ветка для функции.

(3) Каждая новая функция находится в отдельной ветке Feature, которая использует ветку разработки в качестве родительской ветки. Когда новые функции будут завершены, выполните слияние обратно в ветку разработки. Коммиты новых функций никогда не должны напрямую взаимодействовать с основной веткой.

(4) Как только в ветке разработки будет достаточно функций, чтобы сделать выпуск (или приблизиться к заданной дате выпуска), разветвите ветку выпуска из ветки разработки.

Вновь созданная ветвь используется для запуска цикла выпуска, поэтому новые функции не могут быть добавлены в эту ветвь после этого момента времени. Эта ветвь должна заниматься только исправлением ошибок, созданием документации и другими задачами, связанными с выпуском.

После завершения работы над внешним релизом ветвь релиза будет объединена с основной ветвью, и ей будет присвоен номер версии, чтобы пометить ее. Кроме того, эти изменения, внесенные с момента выпуска новой ветки релиза, снова объединены с веткой разработки.

(5) Ветка исправлений используется для создания быстрых исправлений для производственных выпусков.После завершения исправления изменения должны быть немедленно объединены обратно в основную ветку (помеченную) и ветку разработки (ветвь текущего выпуска).

Ссылаться на

Pro Git второе изданиеpdf

Начало работы с принципами Git

Список распространенных команд Git

Подробное объяснение удаленной работы с Git

Git рабочий процесс

Канонический процесс использования Git

Стратегия управления веткой Git

Краткое изложение основных концепций и использования GIT

Руководство по рабочему процессу Git: Рабочий процесс Gitflow


Технологический еженедельник IVWEBШок в сети, обратите внимание на публичный номер: сообщество IVWEB, регулярно каждую неделю публикуйте качественные статьи.

Сборник статей еженедельника:weekly

Командные проекты с открытым исходным кодом:Feflow