type
status
category
date
slug
summary
tags
icon
Last edited time
May 21, 2023 07:57 AM
一、Git的"三棵树"二、GIt的工作流程三、Git管理的文件的三种状态四、创建仓库五、查看状态,提交文件六、查看历史提交七、reset八、diff命令九、修改最后一次提交十、删除文件十一、分支十二、重命名文件十三、checkout十四、checkout和reset的区别
一、Git的"三棵树"
- Working Directory 工作区
- Stage 暂存区
- Repository Git仓库
二、GIt的工作流程
- 在工作目录中添加、修改文件
- 将需要进行版本管理的文件放入暂存区
- 将缓暂存区的文件提交到Git仓库
三、Git管理的文件的三种状态
- modified(已修改)
- staged(已暂存)
- committed(已提交)
四、创建仓库
- 在finder中新建一个文件夹。命名为MyProject
- 在终端中依次输入
cd MyProject
git init
- 若成功,则会显示
Initialized empty Git repository in /Users/edisonhuang/MyProject/.git/
- 将工作目录的文件放到GIt仓库只需要两步
git add 文件名
git commit -m "你做了什么"
五、查看状态,提交文件
git status
如果显示
则工作目录干净,没有需要提交的内容
- 在MyProject下创建text_1.md文件,再次
git status
说明有文件在暂存区,可以提交到仓库
git add text_1.md
- 提交到仓库
git commit -m "提交了一个测试文件"
六、查看历史提交
git log
git log --decorate --oneline --graph --all
decorate 让log显示指向这个提交的所引用:分支,还有标签
oneline log的精简显示
graph 图形化显示
all 所有分支
七、reset
git rest --mixed HEAD~
(--mixed默认的可以不写)- 移动HEAD的指向,将其指向上一个快照
- 将HEAD移动后指向的快照回滚到暂存区
git reset HEAD~
几个波浪线就会回滚到之前~个快照- 或者直接
git reset HEAD~5
回滚回前5个快照
git rest --soft HEAD~
- 移动HEAD指向,将其指向上一个快照
git rest --hard HEAD~
- 移动HEAD的指向,将其指向上一个快照
- 将HEAD移动后指向的快照回滚到暂存区
- 将暂存区的文件还原到工作目录
- 总结
- 移动HEAD的指向,将其指向上一个快照(--soft)
- 将HEAD移动后指向的快照回滚到暂存区(—mixed,默认)
- 将暂存区的文件还原到工作目录(—hard)
- 回滚/前滚指定快照
git reset +id号
- 回滚/前滚指定文件
git reset 版本快照 文件名/路径
八、diff命令
- 比较暂存区与工作目录
git diff
- 比较两个历史快照
git diff 快照ID1,快照ID2
- 比较当前工作目录和GIt仓库中的快照
git diff 快照id
- 比较当前目录和最新的快照
git diff HEAD
- 比较暂存区和Git仓库快照
git diff --cached [ 快照ID ]
九、修改最后一次提交
- 修改提交说明
git commit --amend
进入修改页面,中文有可能乱码git commit --amend -m "提交说明"
不进入修改页面直接写命令的时候修改
十、删除文件
git rm 文件名
- 该命令删除的只是工作目录和暂存区域的文件,也就是取消跟踪,在下次提交时不纳入版本管理
- 当工作目录和暂存区域的同一个文件存在不同内容时,执行
git rm -f 文件名
命令就可以把两个都删除 - 如果只删除暂存区域的文件(保留工作目录的),可以执行
git rm --cached 文件名
命令实现
十一、分支
- 创建分支
git branch 文件名
- 切换分支
git check 分支名
- 创建并切换分支
git checkout -b 分支名
- 合并分支
git merge 分支名
- 删除分支
git branch -d 分支名
- 匿名分支
十二、重命名文件
git mv 旧文件名 新文件名
十三、checkout
- 从历史快照或暂存区拷贝文件到工作目录
git checkout --文件名
—是为了预防恰好有一个分支和文件名相同,若确定没有的话,可以写git checkout 文件名
- 切换分支(主要功能)
- 修改指向快照的指针
- 将指向的快照恢复到暂存区域和工作目录
只需要恢复指定的文件/路径,只需要指定具体的文件
十四、checkout和reset的区别
- 恢复文件
- checkout和reset命令都可以用于恢复指定快照的指定文件,并且都不会改变HEAD指针的指向
- 区别
- reset命令只将指定文件恢复到暂存区域(reset命令后面跟的是文件的时候soft和hard不能被使用,默认就是mixed),而checkout命令是同事覆盖暂存区域和工作目录
- 这样看来,恢复文件,reset比checkout安全一些
- 恢复快照
- reset命令将移动HEAD指针(soft)->覆盖暂存区域(mixed,默认)->覆盖工作目录(hard)
- checkout虽然用于切换分支,但事实上也是通过移动HEAD指针和覆盖暂存区域,工作目录来实现的
- 重点区别
- 一、对于
reset —hard
来说,checkout更安全,因为checkout命令在切换分支前会先检查一下当前的工作状态,如果不是“clean”的话,Git不会允许你这样操作,而reset —hard是直接覆盖所有数据 - 二、如何更新HEAD指向,reset命令会移动HEAD所在分支的指向,而checkout命令只会移动HEAD自身来指向另一个分支
- 作者:Jimmy Huang
- 链接:https://huangjihao.com/6a5265d6-c250-448e-85a1-e5ec93828643
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。