本文参考林耿亮的 Git 课程进行学习归纳
1. Git 安装
1.1 Linux 系统
终端输入
# 更新安装包列表
sudo apt update
# 安装 Git
sudo apt install git
# 检查版本
git --version
1.2 Windows 系统
参考这篇: Windows 下 Git 安装与配置-CSDN博客
2. Git 初始化
cd 到需要 Git 初始化的文件夹
# 初始化仓库
git init
# 检查当前仓库状态
git status
发现多出 .git 隐藏文件夹
3. Git 基本指令
3.1 添加文件
在文件夹中,创建新的文件需要添加到暂存区
# 添加指定文件
git add <指定文件名>
# 添加所有文件
git add .
3.2 提交文件
文件添加到暂存区后,需要提交到本地仓库,git 会给每次提交生成独立的版本记录
版本记录是采用摘要算法计算出40位字符,本地可以采用前6位,可通过版本号找到曾经的历史版本
历史版本是易对象数的结构存在仓库下 .git/objects 目录里
git commit -m "描述本次提交内容"
# 其他用法
# 参数 -a, 表示直接从工作区提交到版本库,省略 git add 步骤
git commit -a
# 提交暂存区的指令文件到仓库区
git commit <指定文件名>
# 使用一次新的 commit,替代上一次提交,会修改 commit 的id
git commit --amend -m "描述本次修改的内容"
3.3 提交历史
终端输入
# 显示所有提交历史信息
git log
# 其他用法
# 查看日志(最近20条),不带参数 -n 则显示所有日志
git log -n20
# 参数 --oneline 可以让日志为一行输出
git log -n20 --oneline
# 参数 --graph 可以可视化显示分支关系
git log -n20 --graph
# 显示特定文件的版本历史
git log --follow [特定文件名]
3.4 查看文件变更
# 显示工作目录和暂存区之间的差异
git diff
3.5 查看当前仓库状态
git status
Changes to be committed 表示已经添加到暂存区的文件
Changes not staged for commit 表示已经修改但没有添加到暂存区的文件
Untracked files 表示未跟踪的文件
4. 传输协议
在 Gitee 上注册账号,绑定邮箱,创建自己的仓库
4.1 HTTPS
HTTPS 是基于 HTTP 的加密协议,每次推送内容到远程仓库或拉取远程仓库时都需要验证账号和密码,HTTPS 的优点是简单易用,兼容性较好;缺点是每次操作都需要输入账户和密码
4.2 SSH
SSH 是一种安全的远程登录协议,Git 通过 SSH 密钥来验证用户身份,使用 SSH 时私钥存储在本地,公钥存储在远程仓库中,SSH 的优点是安全性高,不需要频繁输入账号和密码;缺点是需要复杂的配置
4.2.1 生成公钥
以 Gitee 为例,终端里输入
ssh-keygen -t ed25519 -C "Gitee SSH Key"
一直按下 Enter 键直至输出密钥
Linux 用户会在 /home/用户名/.ssh 生成密钥文件(Windows 用户在 C:\User\用户名.ssh 目录下)
其中 id_ed25519 代表私钥,用于身份验证;id_ed25519.pub,表示公钥
复制 id_ed25519.pub 的内容,进入 Gitee 账户里的设置,粘贴进公钥设置里,并设置标题,点击提交
4.2.2 验证 SSH 连接
进入项目文件夹,在终端中输入
ssh -T git@gitee.com
# 提示输出 输入 yes
# 终端输出以下内容,代表连接成功
Hi ajianbest6(@ajianbest6)! You've successfully authenticated, but GITEE.COM does not provide shell access.
5. 关联远程仓库
关联远程仓库有两种方法:
5.1 将远程仓库克隆到本地
选择 gitee 上创建好的仓库,点击克隆/下载,选择任一协议,复制下载指令(git clone 开头的)
打开需要克隆到的文件夹地址,终端输入复制的下载指令,就能创建出一个和仓库同名的文件夹,里面还有 .git 文件,说明已经生成一个 git 仓库了
5.2 将已有的本地仓库和远端仓库进行关联
点击克隆/下载,选择任一协议,复制仓库地址连接
# 关联远程仓库
git remote add origin 复制的仓库地址链接
# 验证关联成功
git remote -v
看到有两行仓库地址输出,则为关联成功
# 推送本地仓库到远程仓库
git push -u origin "master"
刷新远程仓库,就能看到推送上去的本地文件
5.3 git pull
拉取远端的最新更新
git pull <远程仓库名> <远程仓库分支>
通常的都是用 git pull,默认拉取当前关联分支的最新更新
5.4 git push
推送本地的最新修改(先将本地修改文件进行3.2中的提交,再进行 git push 操作)
git push <远程仓库名> <本地分支名>:<远程分支名>
通常的都是用 git push,默认推送到当前关联分支
6. 分支
在 Git 中,分支(Branch) 是一个非常核心且强大的概念。它不仅简化了多人协作开发流程,还支持并行开发、版本控制、功能隔离等
6.1 创建分支
终端输入
# 创建新分支
git branch <新分支名>
# 查看所有分支
git branch
# 切换分支
git checkout <新分支名> # 或者 git switch <新分支名>
6.2 合并分支
首先切换到分支上,提交所有修改的内容,即将合并到主分支上,终端输入
# 切换到主分支
git checkout master
# 合并分支
git merge <新分支名>
理想情况下,合并没有冲突,成功合并
当有冲突的情况下,git 提示要解决冲突,终端输入
# 查看当前冲突状态
git status
找到冲突文件,用编辑器打开(vscode或者其他),文件会出现以下标记
<<<<<<< HEAD
这是当前分支的内容
=======
这是要合并进来的分支的内容
>>>>>>> dev
手动解决冲突,然后删除标记符号<<<<<<< HEAD ======= >>>>>>> dev,再次重新提交
6.3 删除分支
合并到主分支后,该分支就可以删除,终端输入
git branch -d <新分支名>
# 查看分支状态
git branch
分支删除成功
注意,在删除分支前要确保已经合并到主分支,否则 git 会提示报错
如果需要强制删除分支,终端输入
git branch -D <新分支名>
7. 标签
标签用于记录某次重要更新
7.1 打上标签
# 轻量标签
git tag <标签名> # 在最新的 commit 上打上标签
# 创建带附注的标签
git tag -a <标签名> -m "标签说明"
# 给某一次提交打上标签
git tag -a <标签名> <commit的哈希值> -m "标签说明"
# 查看标签
git tag
# 查看详细标签信息
git show <标签名>
7.2 推送标签
# 推送单个标签
git push origin <标签名>
# 推送所有标签
git push origin --tags
7.3 删除标签
# 删除本地标签
git tag -d <标签名>
# 删除远程标签
git push origin --delete <标签名>
8. 恢复文件
当文件提交到暂存区,但是想恢复到之前的状态
git checkout -- <文件名>
# 撤销存放在暂存区
git reset <文件名>
# 撤销提交到前一次提交
git reset --soft Head~1
# 生成一次新的提交,且之前的提交还保留
git revert <要撤销的 commit 哈希值>
可以在 vscode 中下载 GitLens 插件
就可以在 vscode 左侧的插件中看到多少文件修改,以及多少文件存放在暂存区和提交指令
git revert 对比 reset 更加安全,不会影响到团队其他人的提交