• Git版本控制管理


    Git基础_环境配置

    安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。

    设置用户信息

    git config --global user.name "Bandits"
    git config --global user.email "gb010704@163.com"
    
    • 1
    • 2

    查看配置信息

    检查当前的设置

    git config --list
    git config user.name
    
    • 1
    • 2

    注意:
    通过上面的命令设置的信息会保存在~/.gitconfig文件中。

    Git基础_本地初始化仓库

    git init
    
    • 1

    小提示:
    git init 命令会在上述目录中创建一个名为 .git 的隐藏目录,并在其中创建一个版本库。该目录为文件,查看->显示隐藏目录。

    Git基础_文件的两种状态

    在这里插入图片描述

    注意:
    Git不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。

    untracked未跟踪

    未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制.通过git add 状态变为Staged.

    tracked已跟踪

    被纳入版本控制

    • Unmodified
      文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件。

    • Modified
      文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout则丢弃修改过,返回unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。

    • Staged
      暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified。
      在这里插入图片描述

    注意:

    • 新建文件—>Untracked
    • 使用add命令将新建的文件加入到暂存区—>Staged
    • 使用commit命令将暂存区的文件提交到本地仓库—>Unmodified
    • 如果对Unmodified状态的文件进行修改—> modified
    • 如果对Unmodified状态的文件进行remove操作—>Untracked

    查看文件状态命令

    git status
    
    • 1

    参数:
    -s: 简洁输出

    Git基础_文件加入暂存区

    文件加入暂存区命令

    git add 文件名
    
    • 1

    文件取消暂存区命令

    git reset 文件名
    
    • 1

    Git基础_文件提交与删除

    在这里插入图片描述
    如果仅是通过git add命令把移动加到暂存区,还不算是完成整个流程。如果想让暂存区的内容永久保存下来,就要使用git commit命令。
    在这里插入图片描述

    文件提交命令

    语法结构:

    git commit -m "提交信息"
    
    • 1

    参数:

    • -m : 本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以重点是说清楚,能让自己和别人很快明白就行。

    如果不加m参数,会进入类似vim编辑。

    修改commit记录

    要改动Commit记录有几种方式。
    (1)把.git目录整个删除(不建议)。
    (2)使用git rebase命令来改动历史记录。
    (3)先把 Commit用git reset命令删除,整理后再重新Commit。
    (4)使用–amend参数改动最后一次的Commit。

    使用–amend参数进行Commit

    首先先查看一下我们的提交记录

    git log --oneline 
    
    • 1

    此时最后一次提交的记录 写的提交信息不合理,只需要在Commit命令后面加上–amend即可

    git commit --amend -m " new  message "
    
    • 1

    Git基础_删除文件

    git rm 文件名
    
    • 1

    这将删除指定文件并将删除操作添加到暂存区中,然后你可以通过提交来永久删除该文件(删除掉本地仓库中文件)。
    想要删除远程仓库中的文件就需要进行推送当前的分支

    git push origin 分支名
    
    • 1

    Git基础_将文件添加至忽略列

    一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为 .gitignore的文件(文件名称固定),列出要忽略的文件模式。

    忽略规则

    # / 表示 当前文件所在的目录
    # 忽略public下的所有目录及文件
    /public/*
    #不忽略/public/assets,就是特例的意思,assets文件
    不忽略
    !/public/assets
    # 忽略具体的文件
    index.class
    # 忽略所有的class
    *.class
    # 忽略 a.class b.class
    [ab].class
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意:

    • #匹配规则和linux文件匹配一样
    • #以斜杠“/”开头表示目录
    • #以星号“*”通配多个字符
    • #以问号“?”通配单个字符
    • #以方括号“[]”包含单个字符的匹配列表
    • #以叹号“!”表示不忽略(跟踪)匹配到的文件或目录

    Git基础_日志记录操作

    查看日志

    语法结构:

    git log
    
    • 1

    参数:
    –graph : 查看分支合并图
    –oneline : 标记把每一个提交压缩到了一行中

    获取执行过的命令

    语法结构

    git reflog
    
    • 1

    Git基础_比较文件差异

    在这里插入图片描述
    diff是指的是两个事物的不同。例如在Linux系统中,diff命令会逐行比较两个文本的差异然后显示出来。

    git diff命令格式

    语法结构:

    git diff 
    
    • 1

    Git技术中显示暂存区和工作区文件的差异

    git diff --cached 
    
    • 1

    Git技术中对比暂存区和版本库文件的差异

    Git基础_还原文件

    在这里插入图片描述
    对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 ----> 暂存区 ----> 工作区。

    对于修改的文件有三种情况:

    • 只是修改了文件,没有任何 Git 操作
    • 修改了文件,并提交到暂存区(即编辑之后,gitadd但没有gitadd但没有 git commit -m …)
    • 修改了文件,并提交到仓库区(即编辑之后,gitadd和gitadd和 git commit -m …)

    情况I

    只是修改了文件,没有任何 git 操作,直接一个命令就可回退

    git checkout -- 文件名
    
    • 1

    情况II

    修改了文件,并提交到暂存区(即编辑之后,git add但没有gitadd但没有 git commit )

    1. 先将暂存区的撤销掉
    git reset 文件名 # 回到当前版本只是 修改未添加到暂缓区
    
    • 1
    1. 此时在使用情况I就可以恢复
    git checkout -- 文件名 # 恢复到本地仓库中的版本
    
    • 1

    情况III

    修改了文件,并提交到本地仓库区

    1. 查看一下提交记录
    git log --oneline
    
    • 1
    1. 进行版本回退
    git reset HEAD^
    
    • 1
    1. 从本地仓库进行恢复
    git checkout -- 文件名
    
    • 1

    注意:
    git reset 版本号 ---- 将暂缓区回退到指定版本,根据 $ git log --oneline 显示的版本号,可以回退到任何一个版本,也可通过HEAD 来指定版本。

    • HEAD 当前版本
    • HEAD^ 上一个版本
    • HEAD^^ 上上一个版本

    Git远程仓库_常用的Git代码托管平台

    常见远程仓库托管平台

    我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。

    • GitHub (地址: https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯的版本库格式进行托管,故GitHub。
    • 码云(地址: https://gitee.com/)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快。
    • GitLab (地址: https://about.gitlab.com/是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的we务。

    Git远程仓库_注册码云账号、创建远程仓库

    在这里插入图片描述

    登录码云

    注册完成可以使用刚刚注册的邮箱进行登录(地址:www.gitee.com/login

    创建Git远程仓库

    在这里插入图片描述

    在这里插入图片描述

    Git远程仓库_远程仓库操作

    添加远程仓库

    添加一个新的远程Git仓库,同时指定一个可以引用的简写。

    git remote add <shortname><url>
    
    • 1

    注意:

    • shortname :远程的名字(可以随意取名)
    • url : 远程仓库地址

    查看远程仓库

    git remote
    
    • 1

    克隆远程仓库

    git clone  远程仓库地址url
    
    • 1

    移除无效的远程仓库

    git remote rm 远程仓库名字
    
    • 1

    注意:
    此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库。

    Git远程仓库_推送、抓送和拉取

    Git远程仓库_推送

    git push 仓库名 要推送的分支名称
    
    • 1

    从远程仓库中抓取与拉取

    git fetch 
    
    • 1
    git pull
    
    • 1

    注意:

    • git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge,想看见文件就需要手动进行合并文件 git merge origin/master 。
    • git pull是从远程仓库获取最新版本到本地仓库,会自动merge

    Git远程仓库_多人协作冲突问题

    为什么会出现冲突问题

    1. 多人同时修改同一文件的相同部分
    2. 在当前分支上修改了未合并的提交

    Git远程仓库_SSH协议推送

    Git支持的传输协议

    • 本地协议(Local)
    • HTTPS协议
    • SSH(Secure Shell)协议
    • Git协议

    什么是SSH协议

    SSH为Secure Shell(安全外壳协议)的缩写,由IETF的网络小组(Network Working Group)所制定。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。

    配置SSH协议

    1.使用命令ssh-keygen -t rsa生成公钥和私钥

    ssh-keygen -t rsa
    
    • 1

    注意:
    执行完成后在window本地用户.ssh目录(C:\Users\用户名.ssh)下生成如下名称的公钥和私钥。

    2.复制公钥文件内容至服务器上
    在这里插入图片描述

    Git分支__使用分支原因

    查看分支

    git branch
    
    • 1

    参数:

    • -r : 列出所有远程分支
    • -a :列出所有本地分支和远程分支

    创建分支

    git branch 分支名字
    
    • 1

    参数:

    • -m 修改分支名字

    切换分支

    git checkout 分支名字
    
    • 1

    Git分支_推送至远程仓库分支

    git push 远程仓库名字 分支名字
    
    • 1

    创建并切换分支

    git checkout -b 分支名称
    
    • 1

    Git分支

    合并分支

    语法结构

    git merge 要合并的分支名称
    
    • 1

    删除本地仓库分支

    语法结构:

    git branch -d 要删除的分支名称
    
    • 1

    参数:

    • -d 删除本地分支
      注意:
      如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D 。

    如果不小心把还没合并的分支删除了,救得回来吗
    cat分支是从master分支出去的,当前领先master分支两次Commit,而且还没有合并过。这时如果试着删掉cat分支,它会提醒:“这个分支还没全部合并哦”。

    $ git branch -d cat
    error: The branch 'cat' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D cat'.
    
    • 1
    • 2
    • 3

    虽然Git这么贴心的提醒了,但这里仍然把它删除了

    git branch -D cat
    Deleted branch cat(was b1729234)
    
    • 1
    • 2

    分支只是一个指向某个Commit的指标,删除这个指标并不会使那些Commit消失。
    我们可以根据这个ID创建回来这个分支

    git branch new_cat b2323b
    
    • 1

    删除远程仓库分支

    git push origin -d 分支名称
    
    • 1

    Git标签

    标签与分支有什么区别

    标签与分支的区别是,分支会随着Commit而移动,但标签不会。之前介绍过当Git往前推,进一个Commit时,它所在的分支会跟着向前移动。而标签一旦贴上去不管Commit怎么前进,标签都会留在原来贴的那个位置上。因此,分支可以看成是“会移动的标签”。

    列出已有标签

    语法结构

    git tag 
    
    • 1

    创建标签

    语法结构

    git tag 标签名字
    
    • 1

    查看标签信息

    语法结构

    git show 标签名
    
    • 1

    标签推送到远程仓库

    语法结构

    git push 远程仓库名 标签名
    
    • 1

    检出标签

    新建一个分支,指向某个tag

    git checkout -b 新的分支名 已有的标签名
    
    • 1

    删除本地标签

    语法结构

    git tag -d 标签名
    
    • 1

    删除远程标签

    语法结构

    git push origin :refs/tags/标签名字
    
    • 1

    注意:
    :refs/tags/是固定写法。

    Git工作流_Git Flow是什么

    Git Flow是什么

    在使用Git的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。GitFlow工作流通过为功能开发、发布准备和维护分配独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。

    Git Flow 的常用分支

    在这里插入图片描述
    解释:

    • master 主干分支,开发完成的上线的项目版本

    • hotixes 热部署分支,进行主干分支的补丁操作

    • release 预部署分支,测试工程师的调用的分支

    • develop 开发分支,开发源代码分支

    • feature 功能分支,你们调用分支

    • Master/Devlop 分支
      所有在Master分支上的Commit应该打上Tag,一般情况下Master不存在Commit,Devlop分支基于Master分支创建
      在这里插入图片描述

    • Feature 分支
      Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留。
      在这里插入图片描述

    • Release 分支
      Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature 发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。
      在这里插入图片描述

    注意:
    一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支。

    • Hotfix 分支
      hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag。
  • 相关阅读:
    0基础学习PyFlink——Map和Reduce函数处理单词统计
    Kubernetes (k8s 1.23) 安装与卸载
    css锚点跳转导致被顶部元素挡住内容
    Linux 进程终止 进程等待 进程替换 简易shell
    大佬公司的github地址
    【软件设计师21天-考点整理】7)计算机系统构成及硬件基础知识
    DBA常用论坛
    成集云 | 成集云-经销商返利系统集成金蝶云星辰 | 解决方案
    互联网公司是如何跟踪用户喜好并推荐商品的?
    win32概述及框架
  • 原文地址:https://blog.csdn.net/weixin_65180200/article/details/133784485