Git学习笔记
Git 版本管理速查与学习笔记
本文整理自廖雪峰的 Git 教程( https://liaoxuefeng.com/books/git/time-travel/working-stage/index.html ),按照自己的使用习惯重新编排,方便日常查阅。
使用说明:文中的 你的邮箱、你的昵称、你的GitHub用户名 请替换为自己的信息。
速查表
| 场景 | 命令 |
|---|---|
| 初始化仓库 | git init |
| 添加到暂存区 | git add 文件名 或 git add . |
| 提交 | git commit -m "说明" |
| 查看状态 | git status |
| 查看历史 | git log --pretty=oneline --abbrev-commit |
| 查看修改内容 | git diff 文件名 |
| 回退版本 | git reset --hard 版本号 |
| 查找被回退的版本 | git reflog |
| 撤销工作区修改 | git checkout -- 文件名 |
| 删除文件 | git rm 文件名 |
| 绑定远程仓库 | git remote add origin 仓库地址 |
| 上传到远程 | git push origin 分支名 |
| 下载远程仓库 | git clone 仓库地址 |
| 创建并切换分支 | git switch -c 分支名 |
| 合并分支 | git merge 分支名 |
| 创建标签 | git tag 标签名 |
| 推送标签 | git push origin --tags |
目录
核心概念:文件在 Git 中的三个区域
在学习命令之前,先理解文件的流转过程:
工作区(你能看到和编辑的文件夹)
│ git add
▼
暂存区(准备提交的文件列表)
│ git commit
▼
版本库(保存了所有历史版本)
│ git push
▼
远程仓库(例如 GitHub)
提示:大部分命令都围绕这条流程展开。记住"修改 → 加入暂存区 → 提交"三步,就能掌握日常使用的 80% 内容。
1. 创建版本库
本节目标
把一个普通文件夹变成 Git 可以管理的仓库。
1.1 创建工作目录
mkdir learngit # 创建一个文件夹
cd learngit # 进入该文件夹
touch ReadMe.txt # 创建一个文本文件
pwd # 显示当前所在的目录
提示:Windows 系统下路径形如
/c/Users/...,表示 C 盘的用户目录。
1.2 初始化仓库
git init # 把当前文件夹初始化为 Git 仓库
执行后会生成一个隐藏的 .git 文件夹,Git 的所有记录都保存在这里。
1.3 添加文件并提交
git add ReadMe.txt # 把文件放入暂存区
git commit -m "wrote a readme file" # 从暂存区提交到版本库,-m 后为本次说明
提示:
git add时直接写文件名即可,不需要额外处理后缀。文件名要与实际一致,大小写也要相同。
2. 全局配置
本节目标
设置提交时显示的邮箱和昵称。只需配置一次,之后所有仓库都会使用。
git config --global user.email "你的邮箱"
git config --global user.name "你的昵称"
提示:这里的邮箱和昵称会出现在每一次提交记录中,与远程平台(如 GitHub)账号对应时建议保持一致。
3. 查看历史与提交新版本
3.1 查看状态与历史
| 命令 | 作用 |
|---|---|
git log |
查看完整的提交历史 |
git log --pretty=oneline --abbrev-commit |
以一行一条的简洁格式查看历史 |
git status |
查看当前哪些文件被修改、哪些已加入暂存区 |
git diff 文件名 |
查看某个文件具体改了什么(尚未提交时使用) |
git log
git log --pretty=oneline --abbrev-commit
git status
git diff ReadMe.txt
3.2 修改后提交新版本
修改文件后,按以下三步提交:
git add . # 把当前目录下所有修改加入暂存区
git commit -m "修改内容备注" # 提交新版本
提示:
git add .中的.表示当前目录。如果只想提交某一个文件,写文件名即可。每次提交的备注应简要说明改了什么,方便日后查找。
4. 版本回退
本节目标
把文件恢复到之前的某个版本。
4.1 回退到上一个或若干个版本
git reset --hard HEAD^ # 回退到上一个版本
git reset --hard HEAD~100 # 回退到往前 100 个版本
符号含义:
| 写法 | 含义 |
|---|---|
HEAD |
当前最新版本 |
HEAD^ |
上一个版本 |
HEAD~100 |
往前数第 100 个版本 |
4.2 三种回退模式的区别
reset 命令有三种模式,区别在于"回退后,之前的修改去了哪里":
| 模式 | 版本指针 | 暂存区 | 工作区(文件内容) |
|---|---|---|---|
--soft |
回退 | 保留,修改仍在暂存区 | 保留 |
--mixed(默认) |
回退 | 清空,修改变为未暂存 | 保留 |
--hard |
回退 | 清空 | 清空,修改全部丢失 |
注意:
--hard会丢弃未提交的修改,执行前请确认这些修改不需要保留。
4.3 回到某个指定版本
git log --pretty=oneline --abbrev-commit # 先查看历史版本号(commit id)
git reset --hard 版本号前几位 # 例如 git reset --hard f52c633
提示:版本号只需写前 6 到 7 位,Git 会自动匹配。只要记得某个版本的版本号,就可以随时跳转回去。
如果回退后又想回到较新的版本,可以使用:
git reflog # 查看每一次 HEAD 移动的记录,包括已被回退的版本号
找到想要的版本号后,再执行 git reset --hard 版本号。
5. 撤销修改与删除文件
5.1 撤销工作区的修改
git checkout -- ReadMe.txt # 撤销该文件在工作区的所有修改
# 新版 Git 也可使用:git restore ReadMe.txt
注意:
- 如果修改已通过
git add加入暂存区,需要先执行git restore --staged ReadMe.txt取消暂存,再撤销修改。- 如果修改已经
git commit,此命令无法撤销,需要使用版本回退。
5.2 删除文件
git rm test.txt # 删除文件,并把删除操作加入暂存区
git commit -m "确认删除文件 test.txt" # 确认删除
5.3 恢复误删的文件
根据删除后是否已提交,选择不同方法:
| 情况 | 恢复命令 |
|---|---|
执行了 git rm,但还未提交 |
git restore --staged test.txt 后再执行 git checkout -- test.txt |
| 已经提交了删除操作 | git checkout HEAD^ -- test.txt(从上一个版本取回该文件) |
提示:
git rm后直接执行git checkout -- 文件名只适用于未提交的情况。
6. 远程仓库
本节目标
把本地仓库与 GitHub 等远程平台连接,实现备份和多设备同步。
6.1 配置 SSH 密钥
SSH 密钥用于让本地电脑安全地登录 GitHub,无需每次输入密码。
第一步:检查是否已有密钥
到用户主目录下的 .ssh 文件夹中查看是否存在 id_rsa 和 id_rsa.pub 两个文件。
第二步:如果没有,创建密钥
ssh-keygen -t rsa -C "你的邮箱" # 一路按回车即可,无需设置密码
第三步:复制公钥内容
cat ~/.ssh/id_rsa.pub # 显示公钥内容,完整复制
第四步:添加到 GitHub
登录 GitHub,进入账户设置(Settings)中的 SSH and GPG keys,新建一个 SSH Key,名称随意,内容粘贴刚才复制的公钥。
注意:
id_rsa.pub是可以公开给 GitHub 的公钥,而id_rsa是私钥,绝不能泄露给他人。
6.2 创建远程仓库并关联
- 登录 GitHub,新建一个仓库,例如命名为
LearningforGit。 - 在本地仓库目录中执行:
git remote add origin git@github.com:你的GitHub用户名/LearningforGit.git # 绑定远程仓库,origin 为远程仓库的别名
git push -u origin main # 第一次上传
提示:如果执行时提示分支不存在,先用
git branch查看本地分支名。较早创建的仓库默认分支可能是master,此时将命令中的main替换为master。
6.3 日常同步
git push origin main # 后续上传新提交(分支名与上面保持一致)
6.4 其他远程操作
| 命令 | 作用 |
|---|---|
git remote -v |
查看当前绑定的远程仓库地址 |
git remote rm origin |
解除与远程仓库的绑定 |
git clone git@github.com:你的GitHub用户名/LearningforGit.git |
把远程仓库下载到本地 |
7. 分支管理
本节目标
在不影响主线的情况下独立开发新功能,完成后再合并回来。
7.1 创建与切换分支
git branch # 查看所有分支,当前分支前面有 * 号
git switch -c dev # 创建并切换到 dev 分支(-c 即 create)
git switch main # 切换回主分支(旧版本仓库可能是 master)
提示:旧版教程使用
git checkout -b dev实现同样的效果,git switch是更直观的新写法。
7.2 合并分支
git switch main # 先切换到要接收修改的分支
git merge dev # 把 dev 分支的修改合并到当前分支
7.3 删除已合并的分支
git branch -d dev # 删除 dev 分支(已合并后才能删除)
8. 标签管理
本节目标
给重要版本(例如 v1.0)打上易记的名字,方便之后快速找到。
8.1 创建标签
git switch main # 先切换到主分支
git tag v1.0 # 给最新版本打标签
提示:标签默认打在最新提交上。如果要给历史版本打标签,需要在后面加上该版本的 commit id:
git tag v0.9 f52c633 # 给历史版本 f52c633 打轻量标签
git tag -a v0.9 -m "version 0.9 released" f52c633 # 打带说明的标签,-a 指定标签名,-m 为说明文字
8.2 查看标签
git tag # 查看所有标签
git show v0.9 # 查看某个标签的详细信息
8.3 删除标签
git tag -d v0.1 # 删除本地标签
8.4 推送标签到远程
git push origin v0.1 # 推送某一个标签
git push origin --tags # 一次性推送所有尚未推送的本地标签
8.5 删除远程标签
git tag -d v0.1 # 先删除本地标签
git push origin --delete v0.1 # 再删除远程标签
提示:旧写法
git push origin :refs/tags/v0.1也能删除远程标签,效果相同。
参考来源:廖雪峰的 Git 教程,https://liaoxuefeng.com/books/git/time-travel/working-stage/index.html

浙公网安备 33010602011771号