Git 详解(原理、使用)

[复制链接]
发表于 2026-2-12 15:34:46 | 显示全部楼层 |阅读模式
git 快速上手请看这篇博客 Git 快速上手
1. 什么是 Git

Git 是如今最主流的一个版本控制器,而且是分布式版本控制体系,可以控制电脑上全部格式的文档
   版本控制器:记载每次修改以及版本迭代的管理体系
  

  • 对于文本文件,可以记载每次对这个文件的内容举行了怎样的修改
  • 对于二进制文件,具体内容举行了怎样的修改,他没法管理,但可以知道文件巨细等方面的变革
2. 安装

常用下令


  • 查察当前安装的 git 版本
  1. git --version
复制代码


  • Cent OS 安装
  1. yum install git -y
复制代码


  • Ubuntu 安装
  1. apt-get install git -y
复制代码


  • windows 安装
    下载安装包直接安装即可,在这里下载
           安装过程中除了安装路径须要修改之外,其他都用默认的即可
要用 Git 来管理文件,必须将文件放在 Git 堆栈中,只有堆栈中的文件才会被 Git 管理
3. 创建当地堆栈


  • 创建一个目次(工作区)
  1. mkdir mystore
复制代码

  • 进入这个目次
  1. cd mystore
复制代码

  • 创建 git 当地堆栈
  1. git init
复制代码
  此下令实行乐成之后会在当前目次中天生一个 .git 潜伏目次(版本库),用来追踪管理堆栈,注意不要手动修改这个目次中的文件
  

  • 设置当地堆栈的 name 和 email
           全局设置的添加和删除须要加上 --global
  1. git config user.name "ly"
  2. git config user.email "361@163.com"
复制代码


  • 查察刚才的设置
    1. git config -l
    复制代码
  • 删除某一项设置
    1. git config --unset user.name
    复制代码
4. 使用 Git 管理


工作区:并未被 Git 管理
暂存区(stage,/index):临时存放工作区中修改的内容(git 对象的索引)
objects 对象库:修改的工作区内容会写入对象库中一个新的 git 对象中,通过对这些 git 对象的管理维护便可实现对文件的版本管理,故每次 Add 使用都会在版本库中新增一个 git 对象
HEAD:指针,指向某个分支,如 master 分支,存储的也是 git 对象的索引
假如只是单纯将文件置于 mystore 目次下(工作区),Git 是不会举行管理的,须要举行 Add 以及 Commit 使用将要管理的内容置于版本库中之后才会被 Git 管理
4.1 将工作区中的文件使用 Git 举行管理

4.1.1 Add

将工作区中全部的修改内容添加到版本库的暂存区中
  1. git add .
  2. git add 指定某个要添加的修改文件,多个文件用空格分隔
复制代码
  . 表现全部修改的内容
  4.1.2 Commit

将暂存区中的目次树写入 HEAD 指向的相应分支下,即将暂存区中的内容提交到相应分支下
颠末 commit 使用之后才算真正意义上写入到了版本库
  1. git commit -m "这里对本次提交的内容进行描述,如:普通用户提交个人信息功能完成"
复制代码
每次提交都会有一个 commit id,可以在 git 中看到


  • 查察提交记载(时间从近到远)
  1. git log
  2. git log --pretty=oneline  # 每次提交打印一行
复制代码
refs/head/master 中存放的是近来一次提交的 commit id
   commit id:是一个索引,指向一个 git 对象,前两位表现 objects 中的目次名,之后的内容表现目次名中的文件名
  查察 objects 中某个文件:git cat-file -p commit-id
  注意:Git 管理的不是文件,而是文件的修改


  • 查察堆栈状态
    查察从前次提交到如今是否对文件举行过修改,暂存区是否尚有修改未提交,工作区是否尚有修改未添加到暂存区。但不能看到对文件举行了怎样的修改
    1. git status
    复制代码
  • 查察暂存区和工作区差别
    1. git diff 文件名
    复制代码
  • 查察版本库和工作区的差别
    1. git diff HEAD -- 文件名
    复制代码
  • 查察某次提交的代码修改
    1. git show commitid
    复制代码
4.2 版本回退

   本质回退的是版本库中的内容
  1. git reset [--soft | --mixed | --hard] [HEAD]
复制代码
  

  • –soft:只回退版本库中的内容
  • –mixed(默认选项):版本库和暂存区中的内容都举行回退
  • –hard:工作区、暂存区、版本库中的内容都举行回退
  版本库中维护了多个 git 对象,版本回退本质上是将 HEAD -> master 的指向举行了改变,原来指向近来一次修改的 git 对象,回退到上一个提交,就只须要将 master 指向前一个 提交的 git 对象即可


  • 查察当地的每次实行的下令及 commit id
    1. git reflog
    复制代码
4.3 取消修改

对工作区中的文件举行修改之后想要取消,将工作区的修改回退到近来一次 add 或 commit 之后的状态
  1. git checkout -- 文件名
复制代码
分别处于一下状态时,怎样回退
工作区暂存区版本库使用√git checkout – filename√√1. git reset --hard HEAD^
2. git reset --mixed HEAD; git checkout – filename√√√git reset --hard HEAD^(条件是代码未举行 push)

  • 删除文件
    1. git rm filename
    复制代码
    会直接在工作区和暂存区中都删撤除,只须要再实行 commit 即可删除
4.4 和长途堆栈创建关联

  1. git remote add origin 远程仓库链接
复制代码
5. 分支管理

5.1 为什么要分支

   以软件开辟为例,通常环境下一个产物最少有一个生产环境和开辟环境,通常在开辟环境中颠末测试没有标题后将步伐摆设到生产环境,而不会直接在生产环境乱搞,由于一旦生产环境出现标题,将会造成严肃丧失。
  我们可以通太过支,将 master 分支(稳固代码)作为生产环境的代码,在 dev 分支举行新功能的开辟,颠末测试没有标题之后再归并到 master 分支,如许对 master 分支代码的影响就会低沉
  固然,也可以通太过支来更好的举行协同开辟,以 master 作为主分支,多人协同开辟时,每个人都在本身的分支上举行开辟,测试没有标题之后再归并到 master 分支上
  

5.2 分支管理



  • 查察当前堆栈有哪些分支
    1. git branch
    复制代码
          HEAD 指向的分支就是工作分支,工作分支名字前面有 * 标记
  • 创建分支
    1. git branch
    2. 分支名
    复制代码
    乐成创建分支之后,当前分支也指向近来一次提交的 git 对象
  • 切换工作分支
    1. git checkout 分支名
    复制代码
    git checkout -b 新分支名 可同时实现创建新分支和切换到新分支的使用
  • 归并分支
    在 master 分支中归并 abc 分支
    1. git merge abc
    复制代码
    当归并分支有辩论时,须要手动办理辩论,并再次提交(Add,Commit)(no fast-forward)

    • no ff:可以在提交分支中显着看到归并使用
    • ff:不能区分出来是 maser 提交的照旧分支归并的
                   可以使用 git merge --no-ff -m "归并分支" 分支名 来实现,如许在分支图中就可以清晰的辨别
       
  • 删除分支
    1. git branch
    2. -d abc
    复制代码
    若在分支未被归并之前就要删除分支,则这里的 d 须要改为大写,表现强行删除
  • 可视化分支及提交记载
    1. git log --graph --abbrev-commit
    复制代码
5.3 bug 分支

当 master 分付出现 bug 时,不能直接在 master 分支上举行修改,由于有大概会由于此次修改而引入其他 bug
假如在 dev 分支上开辟的过程中,发现 master 分支存在 bug,一样平常不会直接在 dev 分支上举行 bug 修复,而是基于 master 分支新建分支来专门处置惩罚这个 bug

  • 在 dev 分支上的已被 git 管理而未举行 add 的修改内容,可以通过 git stash 来将工作区中的内容举行存储,否则切换到 master 分支中,也能看到在 dev 分支中对工作区中内容的修改。
  • 基于 master 分支创建新分支举行 bug 修复,并将其归并到 master 分支,删除这个用于修复 bug 的分支
  • 切换到 dev 分支,将存储区中的内容规复 git stash pop,继承举行开辟,然后提交
  • 将 dev 分支归并 master 分支并测试,如许纵然归并有辩论,也不会影响 master 分支的代码,若归并之后有辩论,在 dev 分支上举行修改测试,办理标题之后再提交,然后归并到 master 上,就不消再 master 分支上再办理辩论了
6. 当地堆栈与长途堆栈的交互

6.1 克隆



  • 克隆长途堆栈到当地
    1. git clone 远程仓库链接
    复制代码

    • HTTP 方式
      直接克隆
    • SSH 方式
      SSH 黑白对称加密,须要将当地的公钥设置到 git 服务器
      起首在用户主目次查察是否有 .ssh 目次,如有,进入查察是否有 id_rsa、id_rsa.pub 这两个文件,如有,则直接将 id_rsa.pub 中的内容在 git 服务器上举行设置,即可通过 SSH 方式克隆堆栈。若没有这两个文件,则实行以下下令天生 SSH 密钥文件,然后在 git 服务器上设置。设置完成后即可举行克隆
      1. ssh-keygen -t rsa -C "邮箱地址"
      复制代码

  • 查察长途堆栈
    1. git remote
    2. git remote -v
    复制代码
6.2 推送

将当地的修改推送到长途堆栈
  1. git push origin 本地分支:远程分支
复制代码
  push 使用是长途分支和当地分支之间的交互,要让两个分支创建链接,才华推送乐成。克隆时,git 会自动对 master 分支创建链接
  6.3 拉取

长途堆栈的代码大概被其他用户修改了,须要将长途堆栈代码拉取到当地
  1. git pull origin 远程分支:本地分支
复制代码
  这里本质上是两个使用,1. 拉取;2. 归并
  

  • 拉取分支内的内容,须要创建毗连,大概指定分支
  • 拉取堆栈内容,无需创建毗连或指定分支
  6.4 .gitignore 文件

有的文件不须要被 git 追踪管理,可以将其添加到 .gitignore 文件中(存在于工作区根目次),在举行 add、commit、push 等使用时,就会忽略这些文件。
  1. # 忽略 .idea 文件以及以 .out 结尾的文件
  2. .idea
  3. *.out
  4. # 不忽略 today.out 文件
  5. !today.out
复制代码


  • 假如有的文件添加到了 .gitignore 中,又想上传上去,则可使用以下下令欺凌上传
    1. git add -f 文件名
    复制代码
当 .ignore 文件特殊多,有的时间上传文件,被忽略,已经不知道哪一项设置导致的,可以使用 git check-ignore -v 文件名 来得知
给下令设置别名
  1. git config --global alias.con config
复制代码
7. 标签管理

通过标签,来对某个 commit id 举行标记,相称于 commit id 的别名,可以通过标签来标记紧张的版本以及对 commit id 的语义化
   在 .git 目次中管理了 tags
  

  • 为近来一次提交打标签
    1. git tag
    2. 标签名
    复制代码
  • 查察全部标签
    1. git tag
    复制代码
  • 为之前的某次提交打标签
    1. git tag
    2. 标签名
    3. commitid
    复制代码
  • 打标签带上形貌信息
    1. git tag
    2. -a 标署名 -m "形貌信息" commitid
    复制代码
  • 查察某个标签
    1. git show 标签名
    复制代码
  • 删除标签
    1. git tag
    2. -d 标署名
    复制代码
          要删除长途堆栈的标签,须要在当地删除之后,举行 push
       
    1. git push origin :标签名
    复制代码
  • 推送当地标签到长途堆栈
    1. git push origin 标签名
    复制代码
  • 推送全部标签
    1. git push origin --tags
    复制代码
8. 其他



  • 创建当地分支并和长途分支创建链接
    1. git checkout -b 分支名 origin/分支名
    复制代码
    1. git branch
    2. –-set-upstream-to=长途堆栈名/长途分支名 当地分支名
    复制代码
  • 查察链接
    1. git branch
    2. -vv
    复制代码
8.1 同一分支上多人协作开辟


  • 开辟完毕后举行 push
  • 如有辩论,无法 push,则先辈行 pull
  • 当地办理辩论,重新提交并 push
  • 归并分支,删除开辟分支
8.2 多人多分支协作

让某个功能私有某一个分支
8.3 归并分支

分支的归并可以在当地举行也可以在长途堆栈举行(PR)
   PR:开辟职员在完成某个功能的开辟之后,填写 PR 申请单,向管理员发起分支归并的申请,由管理员考核并决定是否要归并,管理员考核通过之后即可自动在长途堆栈归并
  

  • 查察长途分支环境
    1. git remote show origin
    复制代码
  • 删除 stale 的分支
    1. git remote prune origin
    复制代码
8.4 环境隔离

为了使终极发布上线的代码的更稳固,须要摆设稳固的代码到服务器上,而不会直接在用户直接访问到的服务器上举行开辟和测试。因此须要有多个环境来分别举行开辟、测试、摆设等。也就有了开辟环境、测试环境、预发布环境、灰度环境、生产环境等。
8.5 Git Flow 模子

Git Flow 是一个非经常见的分支模子。
分支名称实用环境表明master主分支生产环境develop开辟分支开辟环境release预发布分支预发布 / 测试环境feature需求开辟分支当地hotfix告急修复分支当地8.5.1 master 分支

只读。用于摆设生产环境,一样平常由归并 release 分支得到。全部的 master 分支的推送都要打标签记载,便于追溯,且 master 分支不能删除。
8.5.2 feature 分支

基于 develop 分支创建,用于新功能或新特性的开辟,开辟完成之后,将 feature 分支归并到 develop 分支,后删除。


  • 定名规则:feature/user_createtime_feature(功能形貌)
8.5.3 develop 分支

基于 master 分支创建,只读,记载开辟提交,始终保持最新完成以及 bug 修复后的代码
8.5.4 release 分支

预发布分支,在 feature 分支归并到 develop 分支之后,基于 develop 分支创建 用于提交给测试职员举行测试。若测试有标题,则须要开辟者在 develop 分支上看看是否存在标题,然后在 feature 分支上举行修复。release 分支属于临时分支,代码上线后可删除


  • 定名规则:release/version_publishtime
8.5.5 hotfix 分支

用于对 master 分支的 bug 举行修复(告急修复),基于 master 分支创建,然后修复 bug,之后将该分支归并到 master 分支以及 develop 分支
8.6 git 干系图标无法表现的标题

在注册表的以下目次中将 Max Cached Icons 改为 2000,并将 ShellIconOverlayIdentifiers 目次下和 git 干系的目次通过缩进排到最前面即可
HKEY_LOCAL_MACHINE\Software\Microsoft\windows\CurrentVersion\Explorer\
git pull 与 git push 下令 是否和所在分支干系
试。若测试有标题,则须要开辟者在 develop 分支上看看是否存在标题,然后在 feature 分支上举行修复。release 分支属于临时分支,代码上线后可删除


  • 定名规则:release/version_publishtime
8.5.5 hotfix 分支

用于对 master 分支的 bug 举行修复(告急修复),基于 master 分支创建,然后修复 bug,之后将该分支归并到 master 分支以及 develop 分支
8.6 git 干系图标无法表现的标题

在注册表的以下目次中将 Max Cached Icons 改为 2000,并将 ShellIconOverlayIdentifiers 目次下和 git 干系的目次通过缩进排到最前面即可
HKEY_LOCAL_MACHINE\Software\Microsoft\windows\CurrentVersion\Explorer\

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表