Git基本操作
1. 什么是Git?
Git是一种分布式版本控制系统,广泛用于协作开发、版本管理和分支管理
- 协作开发:每个开发者在本地都有完整的仓库,可以从远程仓库拉取最新更新到本地仓库,也可以提交本地仓库的修改到远程仓库
- 版本管理:Git记录了项目的每一次更改,并可以通过查看历史记录比较差异和文件恢复
- 分支管理:Git支持开创多个独立的工作线,运行开发者在分支进行开发、测试和修复,将项目发布在主分支(master或main)
Git本义其实是饭桶、傻瓜的意思,创始人林纳斯·托瓦兹(Linus Torvalds)想说哪怕是傻瓜都可以使用git实现分布式版本控制
后人将“Git” 解释为 “Global Information Tracker” ,即全球信息追踪器,一定程度上蕴含了Git的功能,但这并不是命名的真实意图
2. Git原理
【Git仓库(Repository)】
- 远程仓库:托管在网络服务器上的Git仓库(Github或Gitee),用于开源共享和协作开发
- 本地仓库:托管在开发者个人计算机上的Git仓库,包含项目的所有文件及其版本历史记录
【Git的四个区】
- 工作区/本地库:存放项目的本地副本,是编辑文件的地方
- 暂存区:暂时存放你准备提交的修改
- 版本库:保存了项目的所有提交记录,即项目的所有版本历史
- 远程库:托管在网络服务器上的Git仓库
3. Git操作
3.1 Git安装
git安装网上很多教程,这里推荐这个链接
3.2 SSH
SSH(Secure Shell):安全外壳协议,提供了对计算机的加密连接,确保数据在传输过程中的机密性和完整性,主要用于远程登录、文件传输和命令执行
【SSH的认证】
| 方法 | 方式 | 适用 | 性质 |
|---|---|---|---|
| 密码(password) | 用户提供用户名和密码给服务器来验证身份 | 临时访问 | 每次都需要输入,麻烦 |
| 密钥(secret key) | 私钥存储在本地,公钥存储在服务器 | 长期访问 | 配置好之后免密登录,私钥不容易泄露 |
【SSH的认证流程】
- 生成SSH密钥对:
-t rsa指定密钥类型为RSA,b 4096指定密钥长度为4096位,-C your_email为密钥添加邮箱参数
1 | ssh-keygen -t rsa -b 4096 -C your_email |
your_email是在github或gitee注册时用的邮箱!
按提示操作
- 输入文件保存位置:可以自己设置路径,默认是保存在
c/Users/DELL/.ssh - 输入私钥访问密码
- 确认私钥访问密码
- 输入文件保存位置:可以自己设置路径,默认是保存在
复制公钥:切换到路径下的目录,复制公钥文件
id_rsa.pub内容添加公钥:在github或gitee中的个人设置中添加公钥(标题可以写笔记本电脑的名字,用于标识此电脑)
测试SSH连接
1 | ssh -T [email protected] |
3.3 配置
- 配置本地的用户名和邮箱:帮助客户端身份被Gitee/Github服务器正确识别
1 | git config --global user.name your_name |
使用命令git config --list可以查看配置信息
- 初始化Git仓库
1 | cd path_to_your_project |
会创建一个名为.git的子目录,需要设置显示隐藏的项目才能看到
- 连接到远程仓库:引用名是可选的,默认是origin,哪怕自定义了远程仓库引用名,origin依然保留
1 | git remote add 引用名 远程仓库URL |
可以通过git remote -v或git remote show来查看连接信息
3.4 获取
3.4.1 获取整个仓库
克隆仓库:将远程仓库完整地克隆到本地,如果本地存在同名文件或文件夹会报错,因此这个方法适用于最初在空文件夹中获取远程仓库
1 | git clone 远程URL |
后台会自定建立一个本地仓库和远程仓库的连接!不再需要先前的手动连接!
3.4.2 获取最新更改
拉取仓库:从远程仓库的分支拉取最新的更改到本地仓库(注意合并冲突)
1 | git pull 引用名 分支名 |
本地仓库和远程仓库必须存在连接才能使用该命令
3.5 发布
修改:在本地添加、删除和编辑文件
上传:将工作区的修改上传到暂存区(第一个针对全部文件,第二个是指定文件或文件夹)
1 | git add . |
- 提交:将暂存区的修改提交到到版本库
1 | git commit -m 声明内容 |
-m 声明内容是必须的!这符合协作开发时每个人都清楚知道文件更改详情的原则!如果不使用-m选项会自动进入Vim编辑器,十分不好用
- 推送:将分支版本库的修改推送到远程仓库的分支
1 | git push 引用名 分支名 |
分支名是远程仓库的分支名,不是本地仓库的
3.6 撤销
软撤销:撤销最近n次提交,但是保留更改在工作区,以便修改提交声明
1 | git reset --soft HEAD~n |
硬撤销:撤销最近n次提交,并且丢弃工作区的所有更改,以便回到历史版本,重新修改文件
1 | git reset --hard HEAD~n |
撤销推送:撤销已经推送的提交,回到之前版本,以便回到本地仓库的历史版本进行新一次的工作流
1 | git revert commit-hash -m 声明内容 |
虽然只使用git revert不会撤销远程仓库的修改,但会自动创建一个撤销的提交,此时使用git push即可实现撤销对远程仓库的修改
commit-hash提交的哈希值可以通过git log指令查看
3.7 分支操作
查看本地分支
1 | git branch |
查看远程分支
1 | git branch -r |
新建分支
1 | git branch name |
在本地新建的分支,跟远程的分支一点关系都没有!
分支重命名
1 | git branch -m old-name new-name |
切换分支
1 | git switch name |
switch只有2.23或更高版本的Git才可以使用,可以使用git --version查看当前git版本
删除分支
1 | git branch -d name |
不能删除当前分支
3.8 引用名操作
添加引用名
1 | git rmeote add name 远程库URL |
修改引用名
1 | git remote rename old-name new-name |
删除引用名
1 | git remote remove name |
查看全部引用名
1 | git remote show |
查看引用名的具体信息
1 | git remote show name |
3.9 四个区的操作(进阶)
查看版本库的提交信息:提交的哈希值,作者信息,提交日期和提交的简短说明
1 | git log |
查看暂存区状态:列出了有几个本地提交尚未推送到远程仓库,并显示哪些更改已被添加到暂存区,哪些更改还在工作区
1 | git status |
查看暂存区和版本库的差异:每次使用git add都会更新暂存区的修改,而版本库只保留最后一次提交的修改,使用以下指令可以审查和比较代码的变化
1 | git diff --cached |
实际上,diff的用法还有很多,既可以比较指定版本的差异,还可以比较分支的差异,甚至可以通过选项来设置比较手段,可以查阅相关资料
拉取远程库到版本库:从远程仓库下载最新更改到版本库,但不合并这些更改到当前工作分支
1 | git fetch 引用名 分支名 |
拉取版本库到本地库:合并指定分支到当前分支
1 | git merge 引用名/分支名 -m 声明内容 |
在合并之前,不允许对本地库进行未提交的更改,否则会造成合并冲突
3.10 通用
实际上,如果只是单纯的获取和提交,使用到的指令可能只有这几个:
- 获取更新:
git pull 引用名 master - 上传修改:
git add . - 提交修改:
git commit -m 声明 - 推送修改:
git push 引用名 master
4. Pull Request
待更

