【Git】深入学习

准备工作

集中式和分布式版本管理

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?

校验和

在这里插入图片描述

提交的唯一标识(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位即可

如果反悔了,可以通过 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" # 老的加密类型

在这里插入图片描述

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

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

回到
在这里插入图片描述

然后就可以克隆了

在这里插入图片描述

在这里插入图片描述

提交代码到远程仓库:

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

问题的处理

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

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

在这里插入图片描述

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

合并没有共同base分支

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

在这里插入图片描述

git merge --allow-unrelated-histories

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

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

标签的使用

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

# 创建标签
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

分支的使用

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

本地分支的使用

创建分支

git branch testing 
git checkout testing
# 合并
git checkout -b testing

合并分支

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

查看所有的分支

git branch

删除本地分支

git branch -d testing

远程分支的操作

# 初始化本地仓库
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

推送一个远程分支:

git push origin develop

# 李四操作
git checkout develop

删除远程分支

git push origin -d develop

rebase

在这里插入图片描述

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

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

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

工作流

第一图:

  • 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

高级的命令

git tag

git checkout -b develop
git push origin develop

git merge develop
git rebase

全新的项目

仓库在远程初始化

克隆远程仓库搭建项目
  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
    
  3. 设置上游分支

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

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

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

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

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

    git push
    

仓库在本地初始化

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

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值