предисловие
Что касается введения git, я не буду повторяться здесь, заинтересованные студенты могут прочитать написанную ранее статью о разнице между git и svn и о том, как настроить git;
Недавно я метался с gitlab ci, и я хочу сделать некоторые инструменты, которые включают в себя, какие команды git использовать, и запускать туда и обратно для запроса, поэтому я хочу написать связанную с git команду, как сводную записку, что удобно для последующих расспросов, а еще хочу углубить впечатление;
Что касается инструментов, то существует много графических инструментов git, jb также использовал графические инструменты в начале, но со временем столкнулся со многими проблемами при использовании графических инструментов,
Например, если вы отправляете в буфер и не хотите пушить, как вывести? Как откатиться после нажатия и т. д., есть стоимость обучения для инструмента,
Вместо того, чтобы знакомиться с инструментами, лучше потратить некоторое время на понимание команд Git, не говоря уже о том, что ввод команд вручную выглядит очень круто~
местная команда
1. Конфигурационный файл — git config
Как правило, после установки git руководство поможет вам настроить имя пользователя и почтовый ящик.В настоящее время требуется команда git config, а имя пользователя и почтовый ящик являются переменными локального клиента git, которые не изменяются при библиотека git~
выделитьconfigиlocal;
config означает глобальную модификацию: конфигурация, обычно используемая всеми пользователями в системе; соответствующий файл **/etc/gitconfig**,
При использовании git config --system этот файл читается
local — модификация от имени пользователя: файл конфигурации в каталоге пользователя применим только к текущему пользователю, соответствующий файл — **~/.gitconfig**,
При использовании git config --global этот файл читается
Файл рабочего каталога — **.git/config**, конфигурация здесь действительна только для текущего проекта.
С точки зрения приоритета локальный выше конфига
git config user.name #查看用户名
git config user.email #查看邮箱
git config --global user.name "your name" #设置用户名
git config --global user.email "your email" #设置邮箱
#其他配置
git config --global --list #查看全局设置相关参数列表
git config --local --list #查看本地设置相关参数列表
git config --system --list #查看系统设置参数列表
git config --list #查看所有git的配置(全局+本地+系统)
git config --global core.edit 喜欢的编辑器
2. Получите помощь — git help
git help #比如,要学习config命令怎么使用,git help config
3. Инициализировать репозиторий — git init
git init 仓库名 # 创建一个新的带Git仓库的项目
git init # 为已存在的项目生成一个Git仓库
4. Добавляем файлы в промежуточную область — git add
Используйте git add имя файла, чтобы добавлять файлы в промежуточную область, поддерживать пакетное добавление
git add 文件名 # 将工作区的某个文件添加到暂存区
git add -u # 将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件
git add -A # 将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
git add . # 将当前工作区的所有文件都加入暂存区
git add -i # 进入交互界面模式,按需添加文件到缓存区
Интерактивный режим выглядит так:
Вот еще один сценарий, который я хотел бы представить:
Предположим, вы изменили файл a.txt, а затем добавили его в промежуточную область:
git add a.txt
git status
Затем я написал еще несколько строк в .txt. В это время, если вы снова укажете статус:
git status
Вы обнаружите, что ваш файл a.txt находится как в области подготовки «Изменения, подлежащие фиксации», так и в области «Изменения, не подготовленные для фиксации».
Не удивляйтесь, это потому, что во временное хранилище через add добавляется не имя файла, а меняется конкретный файл.
Изменения, сделанные во время добавления, добавляются в область подготовки, но новые изменения после добавления не добавляются автоматически в область подготовки. На этом этапе, если вы отправляете:
git commit
Тогда ваши новые изменения не будут зафиксированы.
Поэтому вам нужно сначала повторно добавить файл, а затем зафиксировать отправку последнего содержимого~
5. Закоммитить файлы из области кеша на локальное хранилище — git commit
git commit -m "提交说明" # 将暂存区内容提交到本地仓库
git commit -a -m "提交说明" # 跳过缓存区操作,直接把工作区内容提交到本地仓库
git commit -amend #合并上一次提交,在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中
Если вы не добавите -m «описание фиксации», git позволит вам использовать редактор по умолчанию (например, vi) для написания описания фиксации,
6. Просмотр состояния рабочей области и буфера — git status
git status # 查看工作区与暂存区的当前情况
git status -s # 让结果以更简短的形式输出
7. Сравнение различий — git diff
git diff # 工作区与缓存区的差异
git diff 分支名 #工作区与某分支的差异,远程分支这样写:remotes/origin/分支名
git diff HEAD # 工作区与HEAD指针指向的内容差异
git diff 提交id 文件路径 # 工作区某文件当前版本与历史版本的差异
git diff --stage # 工作区文件与上次提交的差异(1.6 版本前用 --cached)
git diff 版本TAG # 查看从某个版本后都改动内容
git diff 分支A 分支B # 比较从分支A和分支B的差异(也支持比较两个TAG)
git diff 分支A...分支B # 比较两分支在分开后各自的改动
git diff --cached #显示所有已添加缓存区但还未提交的变更
8. Просмотрите историческую запись коммита — git log
git log # 查看所有commit记录(SHA-A校验和作者名称,邮箱,提交时间,提交说明)
git log -p -次数 # 查看最近多少次的提交记录
git log --stat # 显示提交日志及相关变动文件
git log --name-only # 仅显示已修改的文件清单
git log --name-status # 显示新增,修改,删除的文件清单
git log --oneline # 让提交记录以精简的一行输出
git log –graph –all --online # 图形展示分支的合并历史
git log --author=作者 # 查询作者的提交记录(和grep同时使用要加一个--all--match参数)
git log --grep=过滤信息 # 列出提交信息中包含过滤信息的提交记录
git log -S查询内容 # 和--grep类似,S和查询内容间没有空格
git log fileName # 查看某文件的修改记录
Если вы хотите настроить отображение информации о записи отправки, она также поддерживается, используйте -pretty для настройки:
git log --pretty=format:\"%an-%h-%s-%H\" -1
формат — это заполнитель, который может настроить отображаемый формат записи, что удобно для последующего извлечения и анализа;
Ниже приведены часто используемые заполнители формата и их значения:
опции | инструкция | опции | инструкция |
---|---|---|---|
%H | Полная хэш-строка объекта фиксации (commit) | %h | Короткая хэш-строка объекта фиксации |
%T | Полная хэш-строка объекта дерева (tree) | %t | короткая хэш-строка объекта дерева |
%P | Полная хэш-строка родительского объекта (parent) | %p | короткая хэш-строка родительского объекта |
%an | имя автора | %ae | Электронный адрес автора |
%ad | Дата авторской редакции (формат можно настроить с помощью опции -date=) | %ar | Дата ревизии автора, как давно |
%cn | Имя отправителя | %ce | Адрес электронной почты отправителя |
%cd | Дата подачи | %cr | Дата фиксации, отображаемая как давно |
%s | Отправить инструкции |
При использовании oneline или формата в сочетании с опцией --graph вы можете увидеть простой график с некоторыми строками ASCII в начале, который наглядно показывает ветку, в которой находится каждый коммит, и его дифференциацию и реверсию.
Вышеприведенное является лишь кратким введением в некоторые параметры, поддерживаемые командой git log, и ниже приведены некоторые другие часто используемые параметры и их определения;
опции | инструкция |
---|---|
-p | Отображает различия между каждым обновлением в формате исправления. |
--word-diff | Отображение различий в формате Word diff. |
--stat | Отображает статистику модификации файла для каждого обновления. |
--shortstat | Показывать только количество последних строк в --statmodified add remove stats. |
--name-only | Показывать список измененных файлов только после отправки информации. |
--name-status | Отображает список новых, измененных и удаленных файлов. |
--abbrev-commit | Показывать только первые несколько символов SHA-1, а не все 40 символов. |
--relative-date | Используйте более короткое отображение относительного времени (например, «2 недели назад»). |
--graph | Отображает графическое представление ASCII истории слияния ветвей. |
--pretty | Отображать историческую информацию о фиксации в других форматах. Доступные варианты: однострочный, краткий, полный, более полный и формат (за которым следует указанный формат). |
--oneline | Упрощенное использование --pretty=oneline --abbrev-commit. |
Существуют также некоторые схемы для ограничения длины вывода, например, желание видеть журнал только за последний день или самый последний день и т. д.;
git log --since=2.weeks #最近两周内的提交
опции | инструкция |
---|---|
-(n) | Показать только самые последние n коммитов |
--since, --after | Показывать только коммиты после указанного времени. |
--until, --before | Показывать только коммиты до указанного времени. |
--author | Показать только коммиты, относящиеся к указанному автору. |
--committer | Показать только коммиты, относящиеся к указанному коммиттеру. |
--grep | Показать только материалы с указанным ключевым словом |
-S | Показать только материалы с добавленным или удаленным ключевым словом |
Для получения подробной информации вы можете увидеть введение официального сайта git,кликните сюда~
9. Посмотрите, кто отправил строку кода — получите обвинение
git blame 文件名 # 查看某文件的每一行代码的作者,最新commit和提交时间
10. Установите псевдоним команды Git — git config --global alias
Очень проблематично каждый раз вводить полную команду, например checkout. Есть ли способ напрямую ввести co для оформления заказа?
git config --global alias.st status #此处设置st为别名,作用就是status
11. Отметьте важные коммиты — git tag
Обычно важные отправления, такие как выпуски версий, должны быть отмечены значком для последующей обработки отката~
Список тегов:
git tag # 在控制台打印出当前仓库的所有标签
git tag -l ‘v0.1.*’ # 搜索符合模式的标签
Тег:
Существует два типа тегов git:Облегченные и аннотированные этикетки.
Облегченный тег — это ссылка на объект коммита, а аннотированный тег — это отдельный объект в репозитории..
Проще говоря, первый просто добавляет TAG к представлению, указывающему на значение хэша представления;
Последний также сохраняет информацию о тегировщике, время и дополнительную информацию;
Рекомендуется использовать этикетку для заметок.
git tag 标记内容 # 轻量标签
git tag -a 标记内容 -m "附加信息" # 附加标签
Нет необходимости передавать параметры для создания легковесного тега, просто укажите имя тега напрямую.
При создании аннотированной этикетки параметр a представляет собой аббревиатуру аннотированной, указывает тип этикетки и добавляет имя этикетки.
Параметр m указывает описание метки, и информация описания будет сохранена в объекте метки.
Если вы хотите пометить предыдущий коммит, вы можете сначала найти значение SHA1 и установить следующую команду:
git tag -a 标记内容 版本id # 比如:git tag -a v1.1 9202ff53
переключить вкладку
То же, что и команда переключения ветвей:
git checkout [tagname]
Также добавьте TAG при создании новой ветки:
git checkout -b 分支名 标记内容
Используйте команду show для просмотра информации, соответствующей метке:
git show 标记内容
Удалить локальные теги:
git tag -d 标记内容
Удалить удаленные теги:
git push origin --delete tag 标记内容
По умолчанию git push не будет отправлять тег в удаленный репозиторий. Если вы хотите отправить его на сервер, вы можете:
git push origin 标记内容 # 推送某标签到
# 删除所有本地仓库中不存在的TAG:
git push origin --tags
Этикетка пополнения:
git tag -a v0.1.1 9fbc3d0
12. Автодополнение команды Git — дважды нажмите клавишу табуляции при вводе команды
13. Временно сохранить изменения в рабочем каталоге — git stash
В повседневной жизни всегда есть вещи, которые нужно выложить.Например, когда вы кодируете на ветке, соседский одноклассник сказал, jb, в вашем модуле есть ошибка, быстро исправьте ее и отправьте. конечно, вы также можете зафиксировать все файлы, а затем подождать Commit и отменить его после обработки дела, но здесь есть более полезная команда — git stash;
В Git команда stash может помочь вам поместить все содержимое рабочего каталога в отдельное место в вашей локальной области. Оно не будет зафиксировано или удалено. После того, как вы разместите вещи, вы можете сделать свое временное , вы можете забрать его после того, как закончите, и продолжить работу.
В частности, использование тайника просто. Если у вас есть временная работа и вам нужно временно очистить рабочий каталог, вы можете:
git stash
Это так просто, изменения вашего рабочего каталога очищаются, и все изменения сохраняются.
Когда вы закончите, вернитесь к своей ветке, затем:
git stash pop
Все, что было сохранено ранее, возвращается. Это удобно?
Примечание. Недобавленные файлы не будут сохранены, поскольку Git их игнорирует. Если вы хотите спрятать эти файлы вместе, вы можете добавить-u
параметр, это--include-untracked
сокращение для . нравится:
git stash -u
Восстановление файла/откат версии
1. Восстановление файлов — добавлено в staging area, но не зафиксировано — получить проверку
Предположим, файл был добавлен в область временного хранения, но он не был зафиксирован, а в это время был случайно удален, как его восстановить?
Скриншот выше из нового файла для добавления в удаление.Видно, что jb.txt в рабочей области был удален, но jb.txt в области временного хранения не был удален;
# 删除暂存区中的文件:
git rm 文件名
#同时删除工作区和暂存区中的文件
git rm -f 文件名
#删除暂存区的文件,不删除工作区的文件
git rm -cached 文件名
# 误删恢复文件
git checkout -- 文件名
2. Отменить операцию
Обычно есть две ситуации для операций отмены:
-
После изменения файл не помещается в область временного хранения, после операции отмены файл восстанавливается в том же виде, что и версия библиотеки.
-
После изменения файл отправляется в промежуточную область.После отзыва файл восстанавливается до состояния, в котором он был до отправки в промежуточную область.
git checkout --文件名
3.
1. Отменить операцию — git checkout
Обычно есть две ситуации для операций отмены:
- После изменения файл не помещается в область временного хранения, после операции отмены файл восстанавливается в том же виде, что и версия библиотеки.
- После изменения файл отправляется в промежуточную область.После отзыва файл восстанавливается до состояния, в котором он был до отправки в промежуточную область.
Файл не привязан к промежуточной области
git checkout --文件名
Файл был отправлен в промежуточную область, но не в локальный репозиторий.
Если файл написан неправильно, и вы хотите его изменить, но он был добавлен в область временного хранения, вам необходимо сначала отменить его в рабочей области.
git reset HEAD 文件名
На данный момент файл выведен в рабочую область, но содержимое файла не изменилось.Если вы хотите восстановить состояние до модификации, необходимо использовать:
git checkout -- 文件名
2. Удалить файл - git rm
# 删除暂存区中的文件:
git rm 文件名
#同时删除工作区和暂存区中的文件
git rm -f 文件名
#删除暂存区的文件,不删除工作区的文件
git rm -cached 文件名
3. Восстановить файлы - git reset
Если вы хотите восстановить файл до состояния определенной версии, вы можете использовать следующую команду:
git checkout id 文件名
id — это идентификатор коммита при использовании git log, просто возьмите первые 7 цифр~
Если вы хотите восстановить все мои представления до определенной версии, вы можете использовать следующую команду:
git checkout id 文件名
Помимо восстановления в состояние репозитория с id, есть и другие способы записи:
//恢复到上一个版本
git reset --hard HEAD^
// 恢复到前两个版本
git reset --hard HEAD~2 或者 git reset --hard HEAD^^
# git log查看到的commit值,取前七位即可
git reset --hard 版本号
4. Просмотрите запись входной команды — git reflog
git reflog может просматривать все записи операций всех ветвей (включая операции фиксации и сброса), включая удаленные записи фиксации, в то время как git log не может просматривать удаленные записи фиксации.
5. Отменить коммит — git revert
Иногда вам может понадобиться отменить изменения, сделанные фиксацией, вы можете использовать команду revert
git revert HEAD # 撤销最近的一个提交
git revert 版本号 # 撤销某次commit
Обратите особое внимание, отзыв здесь на самом деле не отзывается, и создается новая отправка, чтобы перезаписать старую отправку, а отправленный контент — это только предыдущий контент, поэтому запись отправки все еще будет существовать, не повезло ~
6. Просмотр фиксации для изменения памяти — git slow
git show 提交id # 查看某次commit的修改内容
7. Посмотреть номер версии ветки — git rev-parse
git rev-parse 分支名 # 查看分支commit的版本号,可以写HEAD
8. Получить файлы, такие как -git fsck
git fsck --lost-found #可以查到丢失的记录
местное отделение
1. Создание и переключение ветки - ветка git
git branch 分支名 # 创建分支
git branch # 查看本地分支
git checkout 分支名 # 切换分支
git checkout -b 分支名 # 创建分支同时切换到这个分支
2. Объединить ветки — git merge
git merge <name> #合并某分支到当前分支
3. Разрешение конфликтов
При отправке файла или слиянии, если есть также соответствующая модификация, будет конфликт.В отличие от svn, git, даже если есть конфликт, содержимое сливается, и конфликтующий файл должен быть обработан в это время;
После открытия файла вы обнаружите, что код будет окружен >>>>>>, что является маркером конфликта:
Содержимое между знаками конфликта >>>>>> является чьей-то модификацией.
Тогда вам придется разобраться с этим и, наконец, не забыть убить все символы~
4. Отменить слияние
При решении конфликтов вдруг не хочется сливаться, что делать? Можно использоватьgit merge --abortОтменить вручную~
git merge --abort
Введите эту строку кода, и репозиторий Git вернется в состояние до слияния.
5. Удалить ветку
git branch -d 分支名 # 删除分支,分支上有未提交更改是不能删除的
git branch -D 分支名 # 强行删除分支,尽管这个分支上有未提交的更改
Как объясняется здесь, текущую ветку нельзя удалить напрямую.Если вы хотите удалить текущую ветку, вы должны сначала перейти в другую ветку, а затем удалить предыдущую ветку~
6. Восстановить случайно удаленную ветку
git log --branches="被删除的分支名" # 找到被删分支最新的commitb版本号
git branch 分支名 版本号(前七位即可) # 恢复被删分支
7. Переименование ветки
git branch -m 老分支名 新分支名 # 分支重命名
Удаленные репозитории и удаленные ветки
1. Переместить локальный репозиторий в удаленный репозиторий — git push
git remote add origin 远程仓库地址 #关联本地与远程仓库
git push -u origin master
#将本地仓库推送到远程仓库,-u是首次提交需要,后续都不需要
git remote set-url origin 远程仓库地址 #修改远程仓库地址
# 也可以先删除origin后再添加
git remote rm origin # 删除仓库关联
git remote add origin 远程仓库地址 # 添加仓库关联
2. Клонируем удаленный репозиторий — git clone
git clone 仓库地址 # 克隆项目到当前文件夹下
git clone 仓库地址 目录名 # 克隆项目到特定目录下
3. Синхронизируйте обновления удаленного хранилища — git pull
git pull #在当前分支直接输入git pull即可
4. Просмотр удаленных веток
git branch -r # 查看所有分支
5. Подтяните удаленную ветку к локальному складу
git checkout -b 本地分支 远程分支 # 会在本地新建分支,并自动切换到该分支
git fetch origin 远程分支:本地分支 # 会在本地新建分支,但不会自动切换,还需checkout
git branch --set-upstream 本地分支 远程分支 # 建立本地分支与远程分支的链接
6. Удалить удаленную ветку
git push origin :分支名
Что касается командной строки, давайте кратко представим ее здесь Для получения более подробной информации перейдите к официальному тексту запроса git:
git-scm.com/book/zh/v2
Миграция проекта
В повседневной работе может происходить миграция проекта, проще говоря, это миграция проекта gitlab на другие склады;
Предположим здесь, что исходный адрес gitlab:git.jbold.com, новый адрес gitlab:git.jbnew.com
Шаги миграции
-
Просмотр gitlab-адреса текущего старого склада
$ git remote -v origin git.jbold.com:jb/jbtest.git (fetch) origin git.jbold.com:jb/jbtest.git (push)
-
Создайте новый проект на новом gitlab и сгенерируйте адрес gitlab:
git@git.jbnew.com/jb/jbtest-new.git
-
Установите локальный адрес gitlab для замены новым адресом gitlab
jb@LAPTOP-2R0431R1 MINGW64 ~/gitprojects/jbtest (master) $ git remote set-url origin git@git.jbnew.com/jb/jbtest-new.git jb@LAPTOP-2R0431R1 MINGW64 ~/gitprojects/jbtest (master) $ git remote -v origin git@git.jbnew.com/jb/jbtest-new.git (fetch) origin git@git.jbnew.com/jb/jbtest-new.git (push)
-
Посмотреть статус филиала
$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master 这里只有一个master,因此直接推送master
-
Отправьте указанную локальную ветку в групповое удаленное хранилище кода.
$ git push origin master:master
Таким образом код переносится со старого адреса склада на новый адрес склада.
резюме
В этой статье в основном представлены общие команды git, охватывающие операции, связанные с файловыми операциями, локальными и удаленными ветвями;
Самое глубокое чувство - это функция настройки git log, которая действительно удобна для извлечения контента~
Спасибо всем~