IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git基础概念和基本操作 -> 正文阅读

[开发工具]Git基础概念和基本操作

1、Git基础概念

1.1、什么是Git

  • Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快读高效地处理从小到非常大地项目版本管理
  • 项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性

1.2、Git的特性

  • 直接记录快照,而非差异比较
  • 近乎所有操作都是本地执行

1.3、SVN的差异比较

  • 传统的版本控制系统是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累积的差异
  • 好处:节省磁盘空间
  • 缺点:耗时、效率低
  • 在每次切换版本的时候,都需要在基本文件的基础上,应用每个差异,从而生成目标版本对应的文件。

1.4、Git的记录快照

  • Git快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件
  • 缺点:占用磁盘空间较大
  • 优点:版本切换时非常块,因为每个版本都是完整的文件快照,切换版本时直接恢复目标版本的快照即可
  • 特点:空间换时间

1.5、Git本地执行

  • 在Git中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息
  • 断网后依旧可以在本地对项目进行版本管理
  • 联网后,把本地修改的记录同步到云端服务器即可

1.6 Git中的三个区域

  • 使用Git管理的项目,拥有三个区域,分别是工作区、暂存区、Git仓库

1.7 Git中的三种状态

  • 已修改:modified表示修改了文件,但是还没将修改的结果放到暂存区
  • 已暂存:staged表示对已修改文件的当前版本做了标记,使之包含在下次提交的列表中
  • 已提交:committed表示文件已经安全地保存在本地的Git仓库中

1.8 Git工作流程

  • 在工作区中修改文件
  • 将你想要下次提交的更改进行暂存
  • 提交更新,找到暂存区的文件,将快照永久性存储到Git仓库

2、Git基础

2.1、安装并配置Git

https:#git-scm.com/downloads

2.2、配置用户信息

git config --global user.name '用户名'
git config --global user.email '邮箱'

2.3、检查配置信息

# 查看所有的全局配置项
git config --list --global

# 查看指定的全局配置项
git config user.name
git config user.email

2.4、获取帮助信息

# 想要打开 git config 命令的帮助手册
git help config

# 想要获取 git config 命令的快速参考
git config -h

2.5、获取 Git 仓库的两种方式

  • 将尚未进行版本控制的本地目录转换为GIT仓库
  • 从其它服务器克隆一个已存在的GIT仓库

2.6、初始化仓库

  • 在项目目录中,通过鼠标右键打开 Git Bash
  • 执行 git init 命令将当前的目录转化为 Git 仓库
  • git init 命令会创建一个名为 .git 的隐藏目录,这个 .git 目录就是当前项目的 Git 仓库,里面包含了初始的必要文件,这些文件是 Git 仓库的必要组成部分

2.7、工作区中文件的4种状态

  • 未跟踪(Untracked)不被Git所管理的文件
  • 未修改(Unmodified)在工作区中文件的内容和 Git 仓库中文件的内容保持一致
  • 已修改(Modified)在工作区中文件的内容和 Git 仓库中文件的内容不一致
  • 已暂存(Staged)工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到 Git 仓库中

3、Git 的基本操作

3.1、查看文件状态

# 查看文件处于什么状态
git status
# 以精简的方式显示文件状态
git status -s

3.2、跟踪新文件

# 跟踪单个文件
git add index.js
# 跟踪多个文件
git add .

3.3、提交更新

# 执行git commit 命令进行提交,其中 -m 选项后面是本次提交消息,来对提交的内容做进一步描述
git commit -m "描述信息"
# 省略git add直接提交
git commit -a -m "描述信息"

3.4、取消暂存的文件

# 从暂存区中移除对应的文件
git reset HEAD 要移除的文件名称

3.5、移除文件

# 从 Git 仓库和工作区中同时移除 index.js 文件
git rm -f index.js

# 只从 Git 仓库中移除 index.html,但保留工作区中的 index.html
git rm --cached index.html

3.6、忽略文件

  • 如果有些文件无需纳入Git的管理,也不希望它们总出现在为跟踪文件列表。
  • 可以创建一个名为 .gitgnore 的配置文件,列出要忽略的文件的匹配模式
  • 以 # 开头的是注释
  • 以 / 结尾的是目录
  • 以 / 开头防止递归
  • 以 ! 开头表示取反
  • 可以使用 glob 模式进行文件和文件夹的匹配

3.7、查看提交历史

# 按时间先后顺序列出所有的提交历史,最近的提交排在最上面
git log

# 只展示最新的两条提交历史,数字可以按需填写
git log -2

# 在一行上展示最近两条提交历史的信息
git log -2 --pretty=oneline

# 在一行上展示最近两条提交历史的信息,并自定义输出的格式
# %h 提交的简写哈希值 %an作者名字 %ar作者修订日期,按多久以前的方式显示 %s提交说明
git log -2 --pretty=format: "%h | %an | %ar | %s"

3.8、回退到指定的版本

# 在一行上展示所有的提交历史
git log --pretty=oneline

# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定的版本
git reset --hard <CommitID>

4、Github远程仓库

4.1、远程仓库的两种访问方式

  • HTTPS:零配置;但是每次访问仓库时,需要重复输入 Github 的账号和密码才能访问成功
  • SSH:需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入 Github 的账号和密码

4.2、基于HTTPS将本地仓库上传到 Github

本地没有现成的 Git 仓库

# 使用终端命令创建 README.md 文档,并写入初始内容为 #project
echo "#project" >> README.md

# 初始化 Git 仓库
git init

# 跟踪README.md文件
git add README.md

# 提交文件
git commit -m "first commit"

# 将本地仓库和远程仓库进行关联,并把远程仓库命名为 origin
git remote add origin https://github.com/GodLovesYou/studytest.git

# 将本地仓库中的内容推送到远程的 origin 仓库中
git push -u origin master

本地有现成的 Git 仓库

# 将本地仓库和远程仓库进行关联,并把远程仓库命名为 origin
git remote add origin https://github.com/GodLovesYou/studytest.git

# 将本地仓库中的内容推送到远程的 origin 仓库中
git push -u origin master

4.3、远程仓库使用 SSH Key

  • SSH Key 的作用:实现本地仓库和Github之间免登录和加密数据传输
  • SSH Key 的好处:免登录身份认证、数据加密传输
  • SSH Key由两部分组成,分别时:
  1. id_rsa (私钥文件,存放于客户端的电脑中即可)
  2. id_rsa.pub (公钥文件,需要配置到 Github中)
4.3.1 生成SSH Key
  1. 打开 Git Bash
  2. 输入命令:ssh-keygen -t rsa -b 4096 -C “电子邮箱地址”
  3. 连续3次回车,即可在 C:\Users\用户名.ssh 目录中生成 id_rsa 和 id_rsa.pub 两个文件
4.3.2 配置 SSH Key
  1. 使用记事本打开 id_rsa.pub 文件,复制里面的文本内容
  2. 在浏览器中登录 Github,点击头像 -> Settings -> SSH and GPG Keys -> New SSH Key
  3. 将 id_rsa.pub 文件中的内容,粘贴到 Key 对应的文本框中
  4. 在 Title 文本框中任意填写一个名称,来标识这个 Key 从何而来
4.3.3 检测 Github 的SSH key是否配置成功
# 打开 Git Bash,输入如下的命令并回车执行:
ssh -T git@github.com

# 如能看到类似消息,证明 SSH Key 已经配置成功了
Hi ***! You've successfully authenticated, but GitHub does not provide shell access.
4.3.4 基于 SSH 将本地仓库上传到 Github

本地没有现成的 Git 仓库

# 使用终端命令创建 README.md 文档,并写入初始内容为 #project
echo "#project" >> README.md

# 初始化 Git 仓库
git init

# 跟踪README.md文件
git add README.md

# 提交文件
git commit -m "first commit"

# 将本地仓库和远程仓库进行关联,并把远程仓库命名为 origin
git remote add origin git@github.com:GodLovesYou/studytest.git

# 将本地仓库中的内容推送到远程的 origin 仓库中
git push -u origin master

本地有现成的 Git 仓库

# 将本地仓库和远程仓库进行关联,并把远程仓库命名为 origin
git remote add origin git@github.com:GodLovesYou/studytest.git

# 将本地仓库中的内容推送到远程的 origin 仓库中
git push -u origin master

4.4、将远程仓库克隆到本地

# 打开 Git Bash,输入如下的命令并回车执行
git clone 远程仓库的地址

5、Git 分支

5.1、分支的概念

  • 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN
  • 如果两个平行宇宙互不干扰,那对现在的你也没啥影响
  • 不过,在某个时间点,两个平行宇宙合并了,结果,你即学会了Git有学会了SVN

5.2、分支在实际开发中的作用

  • 在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发

5.3、master 主分支

  • 在初始化本地 Git 仓库的时候,Git 默认已经帮助我们创建了一个名字叫做 master 的分支。通常我们把这个 master 分支叫做主分支
  • master主分支主要用来保存和记录整个项目已完成的功能代码
  • 不允许程序员直接在master主分支上修改代码,这样做风险太高,容易导致整个项目崩溃

5.4、功能分支

  • 程序员不能直接在 master 分支上进行功能的开发,所以就有了功能分支的概念
  • 功能分支指的是专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发并且测试完毕后,需要合并到master主分支上

5.5、查看分支列表

# 使用如下命令,可以查看当前 Git 仓库中所有分支列表
git branch
分支名字前面的*号表示当前所处的分支

5.6、创建新分支

# 使用如下命令,可以基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样
git branch 分支名称

5.7、切换分支

# 使用如下的命令,可以切换到指定的分支上进行开发
git checkout dev_base

5.8、分支的快速创建和切换

# 使用如下命令可以创建指定名称的新分支,并立即切换到新分支上
# -b 表示创建一个新分支
# checkout 表示切换到刚刚新建的分支上
git checkout -b 分支名称

5.9、合并分支

# 1. 切换到 master 分支
git checkout master
# 2. 在 master 分支上运行 git merge 命令,将 dev_base 分支的代码合并到 master 分支
git merge dev_base

5.10、删除分支

# 当把功能分支的代码合并到 master 主分支上以后,就可以使用如下的命令,删除对应的功能分支
git branch -d 分支名称

5.11、遇到冲突时的分支合并

  • 如果在两个不同的分支中,对同一个文件进行了不同的修改,Git就没法干净的合并它们。
  • 此时需要打开这些包含冲突的文件然后手动解决冲突
# 假设:在把 dev_base 分支合并到 master 分支期间,代码发生了冲突
git checkout master
git merge dev_base

# 打开包含冲突的文件,手动解决冲突之后,再执行如下的命令
git add .
git commit -m "解决了分支合并冲突的问题"

6、远程分支操作

6.1、将本地分支推送到远程仓库

# -u 表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带 -u 参数
git push -u 远程仓库的别名 本地分支名称:远程分支名称

# 实际案例
git push -u origin payment:pay

# 如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化
git push -u origin payment

注意:第一次推送分支需要带 -u 参数,此后可以直接使用 git push 推送代码到远程分支

6.2、查看远程仓库中所有的分支列表

# 通过如下的命令,可以查看远程仓库中,所有的分支列表的信息
git remote show 远程仓库名称

6.3、跟踪远程分支

# 从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同
git checkout 远程分支的名称
# 示例:
git checkout pay

# 从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
git checkout -b 本地分支名称 远程仓库名称/远程分支名称
# 示例:
git checkout -b payment origin/pay

6.4、拉去远程分支的最新代码

# 从远程仓库,拉取当前分支最新的代码,保持当前分支的代码和远程分支代码一致
git pull

6.5、删除远程分支

# 删除远程仓库中,指定名称的远程分支
git push 远程仓库名称 --delete 远程分支名称
# 示例:
git push origin --delete pay 
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:32:17  更:2022-09-04 01:34:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 11:43:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码