• 【Git】学习笔记2.0


    准备工作

    集中式和分布式版本管理

    CVS 和 SVN 属于集中式版本管理

    Git 属于分布式版本管理

    区别:

    1. 集中式管理是把整个仓库放到服务器

    2. 分布式管理是每台电脑都有一个对应的仓库,可以在本地提交,然后再同步到服务器的仓库

    优缺点:

    1. 集中式管理的服务器如果崩了,那么服务器的文件就没了

    2. 分布式管理的服务器如果崩了,那么可以用本地的仓库推送到另一台服务器,所以说本地仓库就是远程仓库的一个备份

    全局配置

    提交信息

    安装Git后,要做的第一件事就是配置用户提交的信息,即设置你的用户名和邮件地址

    • 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改

    • 如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git 都会使用这些信息

    在这里插入图片描述

    配置目录文件:.gitconfig 或 C:\Users\Vincent\.gitconfig 文件

    查看配置信息:

    在这里插入图片描述

    提示:如果命令行配置的方式有问题,可以直接打开配置文件配置

    在这里插入图片描述

    命令别名

    在这里插入图片描述

    VSCode配置Git终端

    https://www.jianshu.com/p/494115f98492

    远程仓库的交互

    获取Git仓库

    有两种方式获取:

    1. 创建本地仓库:git init

    2. 克隆远程仓库:git clone

    提交到Git仓库

    1. git add . 开始跟踪文件,添加到暂存区
    2. git commit -m "xxx" 文件提交到 Git 仓库

    简化写法:git commit -a -m “xxx” (只对修改文件有效)

    如果修改已跟踪的文件需要重新添加到暂存区

    文件状态划分

    1. 未跟踪:默认情况下,Git 仓库下的文件也没有添加到 Git 仓库管理中,我们需要通过 add 命令来操作
    2. 已跟踪:添加到 Git 仓库管理的文件处于已跟踪状态, Git 可以对其进行各种跟踪管理
      • stage:暂缓区中的文件状态
      • unmodified:commit 命令,可以将 staged 中文件提交到 Git 仓库
      • modified:修改了某个文件后,会处于 modified 状态

    在这里插入图片描述

    untracked:未跟踪状态

    检测文件状态

    git status 查看文件状态

    git status -s 查看简洁的信息

    查看提交历史

    通过 git log 可以查看所有的提交历史

    简化写法:git log --pretty=oneline | git log --pretty=oneline --graph

    忽略文件

    .gitignore

    在实际开发中,这个文件通常不需要手动创建,脚手架会帮你生成并配好,在必要的时候添加需要忽略的内容即可

    .DS_Store # mac系统里面会自动生 产的文件
    node_modules
    /dist
    
    # local env files
    .env.local
    .env.*.local
    
    # Log files
    npm-debug.log*
    yarn-debug.log*
    yarn-error.log*
    pnpm-debug.log*
    
    # Editor directories and files
    .idea
    .vscode
    *.suo
    *.ntvs*
    *.njsproj
    *.sln
    *.sw?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    校验和

    在这里插入图片描述

    提交的唯一标识(commit id)

    根据标识查找提交的文件

    版本退回

    Git 通过 HEAD 指针记录当前版本,我们可以通过 HEAD 来改变 Git 目前的版本指向:

    • 上一个版本就是HEAD^,上上一个版本就是HEAD^^
    • 如果是上1000个版本,网民可以使用HEAD~1000
    • 我们可以指定某一个commit id(校验和)
    git reset --hard HEAD^
    git reset --hard HEAD~1000 # ~后加回退数字
    git reset --hard 2d44982 # 校验和选前7位即可
    
    • 1
    • 2
    • 3

    如果反悔了,可以通过 reflog 查看操作历史,找到要回退版本的校验和,然后回退即可

    远程仓库连接

    什么是远程仓库?

    远程仓库(Remote Respository)

    之前的操作都是基于本地仓库,别人无法拿到,要想别人拿到就得把代码共享到远程仓库

    我们可以通过第三方的Git服务器,比如:Github,Gitee,Gitlab等,来搭建我们的 Git 服务

    Gitee 和 GitLab 公司采用的比较多,而 GitHub 一般用来做开源项目,协议一般用MIT

    创建远程仓库

    在这里插入图片描述

    远程仓库验证

    对于私有仓库的操作需要对身份进行验证,共有两种方式:

    1. 基于HTTP的凭证存储
    2. 基于SSH的密钥
    凭证

    在这里插入图片描述

    因为HTTP是无状态的,所以每次对远程仓库的操作都需要登录

    为了避免每次都要登录,可以安装一个 Git Credential Manager for Windows 的辅助工具(默认会安装),它会管理你的凭证,自动帮你验证用户名和密码

    通过下面代码可以查看是否安装:

    通过

    然后就可以克隆,首次操作远程仓库会让你登录,后面就不会了

    在这里插入图片描述

    提交代码到远程仓库:

    在这里插入图片描述

    然后push就不需要你登录了

    在这里插入图片描述

    然后回到远程仓库刷新查看,发现文件已经更新了

    在这里插入图片描述

    删除凭证:

    在这里插入图片描述

    在这里插入图片描述

    SSH密钥

    Secure Sehll(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境

    SSH以非对称加密实现身份验证

    对称加密和解密的密钥都一致的,非对称加密用私钥,解密永公钥,安全性更高

    首先生成公钥和私钥:

    # -t 类型:加密类型  -C 注释:你的邮箱
    ssh-keygen -t ed25519 -C "your email" 
    
    ssh-keygen -t rsa -b 2048 -C "your email" # 老的加密类型
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    打开公钥文件复制里面的内容

    在这里插入图片描述
    在这里插入图片描述

    回到
    在这里插入图片描述

    然后就可以克隆了

    在这里插入图片描述

    在这里插入图片描述

    提交代码到远程仓库:

    在这里插入图片描述
    在这里插入图片描述

    问题的处理

    设置上游分支(跟踪分支)

    目的是让本地分支和远程分支建立连接,每次在push/merge/pull时不用指定远程仓库分支,它会默认匹配上游分支

    在这里插入图片描述

    git fetch # 注意:要先fetch一下,获取远程有哪些分支
    git branch --set-upstream-to=origin/main
    
    • 1
    • 2

    合并没有共同base分支

    本地分支和远程分支即没有共同的祖先,祖先就是上一个版本(commit对象)

    在这里插入图片描述

    git merge --allow-unrelated-histories
    
    • 1

    push时存在的问题

    在这里插入图片描述

    这个问题只出现在:本地分支的名字和远程分支的名字不一样,比如github,gitlab的主分支是main,而本地的是master

    现在的问题是:就算你给master分支设置了上游分支(origin/main),当你push的时候,默认还是推送的是当前分支(origin/matser),这是因为push的默认配置是simple,而simple就是当前是什么分支,远程仓库就推送什么分支,此时可以修改push的配置为upstream,它可以把上游分支推送给远程分支

    # 解决方法一(推荐)
    git config push.default upstream # 默认是simple,推送的远程分支是当前分支;upstream推送的远程分支是上游分支
    # 解决方法二
    git checkout --track origin/main
    git checkout main
    
    • 1
    • 2
    • 3
    • 4
    • 5

    GitHub/GitLab创建远程仓库

    # 初始化本地仓库
    git init
    
    # 添加远程仓库
    git remote add origin xxxx
    
    
    # 从远程仓库获取内容
    git fetch
    git branch --set-upstream-to=origin/main
    git merge --allow-unrelated-histories
    
    # git push
    git config push.default upstream
    
    # 换一种做法
    git checkout main
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    标签的使用

    理解: 你在哪个版本设置,它就停留在哪个版本

    # 创建标签
    git tag v1.0.0
    git tag -a v1.0.0 -m "附注标签"
    # 查看标签
    git tag
    # 删除标签
    git tag -d v1.0.0
    
    # 将本地tag push远程仓库
    git push origin v1.0.0 # 推送指定标签
    git push origin --tags # 推送所有标签
    
    # 删除远程的tag
    git push origin -d v1.0.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    分支的使用

    理解:分支就相当于是一个文件夹,它总是指向最后一个版本,它会随着你版本的推送而移动

    本地分支的使用

    创建分支

    git branch testing 
    git checkout testing
    # 合并
    git checkout -b testing
    
    • 1
    • 2
    • 3
    • 4

    合并分支

    git merge testing # 默认与当前分支合并
    git add .
    git commit -m ""
    
    • 1
    • 2
    • 3

    查看所有的分支

    git branch
    
    • 1

    删除本地分支

    git branch -d testing
    
    • 1

    远程分支的操作

    # 初始化本地仓库
    git init
    
    # 添加远程仓库
    git remote add origin xxxx
    
    
    # 从远程仓库获取内容
    git fetch
    git branch --set-upstream-to=origin/main
    git merge --allow-unrelated-histories
    
    # git push
    git config push.default upstream
    
    # 换一种做法
    git checkout main
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    推送一个远程分支:

    git push origin develop
    
    # 李四操作
    git checkout develop
    
    • 1
    • 2
    • 3
    • 4

    删除远程分支

    git push origin -d develop
    
    • 1

    rebase

    在这里插入图片描述

    和merge功能类似,区别是它可以让提交历史结构更简洁,merge会记录所有提交历史,结构比较复杂

    黄金法则:一定不要在主分支上使用rebase

    git checkout experiment # 切换到要合并的分支
    git rebase master # 合并后,提交了历史的图结构就成线性
    
    • 1
    • 2

    工作流

    第一图:

    • master:作为主分支;
    • develop:作为开发分支,并且有稳定版本时,合并到master分支中;
    • topic:作为某一个主题或者功能或者特性的分支进行开发,开发完成后合并到develop分支中;

    在这里插入图片描述

    • master: 记录主要的版本
      • tag
    • hotfix: 热修复
      • merge master
      • merge develop
    • develop: 开发分支
    • release: 上线的分支
      • merge master
      • merge develop
    • feature: 新特性

    Git中常见的命令总结

    已有的项目

    基础的命令 (必须掌握)

    1. git clone xxx
    2. git add .
    3. git commit -m “xxx”
    4. git pull => git fetch + git merge(拿到最新的代码)
    5. git push

    进阶的命令

    • main
    • develop
    • feature
    git checkout develop
    # 1.检查服务器是否有origin/develop这个分支
    # 2.创建一个本地的develop分支
    # 3.让本地的develop分支自动跟踪origin/develop
    # 4.切换到develop分支
    
    git add .
    git commit -m ""
    git pull
    git push
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    高级的命令

    git tag
    
    git checkout -b develop
    git push origin develop
    
    git merge develop
    git rebase
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    全新的项目

    仓库在远程初始化

    克隆远程仓库搭建项目
    1. 在clone下来的文件夹中搭建整个项目
    2. git add .
    3. git commit -m “初始化项目”
    4. git push
    本地仓库和远程仓库合并
    1. 搭建项目

      git add .

      git commit -m “初始化项目”

    2. 连接远程仓库

      如果你是本地创建的仓库,那么你需要和远程仓库建立连接

      #               仓库名称 仓库地址
      git remote add origin https://gitee.com/vincentgzxGZX/git-demo.git
      git remote remove origin # 断开仓库连接
      git remote # 查看仓库连接
      git remote -v
      
      • 1
      • 2
      • 3
      • 4
      • 5
    3. 设置上游分支

      git branch --set-upstream-to=origin/master # origin/main
      
      • 1
    4. 拉取仓库

      git fetch
      
      • 1
    5. 允许合并没有共同base分支

      git merge --allow-unrelated-histories
      
      • 1
    6. 合并仓库

      git pull origin  master --allow-unrelated-histories
      
      • 1
    7. 修改push的默认属性(可忽略,在本地分支和远程分支不一致时使用)

      git config push.default upstream
      
      • 1
    8. 推送远程仓库

      git push
      
      • 1

    仓库在本地初始化

    打开vue项目远程来接远程仓库,直接push就可以了

    在这里插入图片描述

  • 相关阅读:
    Lurk——Recursive zk-SNARKs编程语言
    1、Spring简介
    STM32F407在RAM中执行程序
    数据结构——图
    人工智能 AI 3:全连接网络,前馈神经网络卷积神经网络:非全连接网络CNN:循环神经网络
    嵌入式软件行业真的没前途吗?
    Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)
    VUE封装-自定义权限控制指令
    执行make menuconfig问题的解决
    二极管为何会单向导通
  • 原文地址:https://blog.csdn.net/qq_42647547/article/details/126609707