Git使用的理论基础
git 通过维护三棵树来进行版本维护
- 工作区域 Working Directory
- 暂存区域 Stage(Index)
- Git仓库 Repository(HEAD)
工作流程
- 在工作目录中添加 修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到Git仓库
文件状态
- 已修改 modified
- 已暂存 staged
- 已提交 committed
使用Git
创建工作目录
在命令提示符中, 切换到对应目录, 输入 git init
此时对应文件夹中会出现 .git文件夹, 是Git用来追踪这个文件夹来管理版本迭代的
创建 README 文件
在 README 描述项目 (注意编码选择)
将工作目录的文件放到Git仓库:
git add README.md //提交到暂存区域
git commit -m "add a readme file" //将暂存区域的内容提交到Git参考
"add a readme file"为说明注释
回到过去
git reset --mixed HEAD~n
移动HEAD的指向, 将其指向上n个快照(不填则为1)
-
默认的mixed参数:
-
重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
-
soft 参数:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
-
hard参数:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
(参考: https://www.jianshu.com/p/c2ec5f06cf1a)
git checkout
查看状态
git status
会显示哪些内容还没提交到暂存区域
查看历史提交
git log
历史版本id可以在使用时只写前几位
参数:
- –oneline 每条日志的输出将只为1行
- –decorate 用来显示一些相关信息, 如HEAD, 分支名…
- –graph 以图形显示分支(配合decorate使用)
- –all 显示所有分支
比较
比较暂存区域和工作目录
git diff
比较两个历史快照
git diff 快照1的ID 快照2的ID
比较当前工作目录和Git仓库中的快照
git diff 快照ID //可以HEAD
比较暂存区域和Git仓库的快照
git diff --cached 快照ID
修改最后一次提交
git commit --amend
删除
git rm 文件名
该命令删除的只是工作目录和暂存区域里的文件, 也就是取消跟踪, 在下次提交时不纳入版本管理
git rm --f 文件名
force removal 暴力删除工作目录和暂存区域里的所有同名文件
git rm --cached 文件名
只删除暂存区域的文件, 而保留工作目录的
重命名
git mv 旧文件名 新文件名
Git分支
创建分支
git branch 分支名
切换分支
git checkout 分支名
合并分支
git merge 分支名
删除分支
git branch -d 分支名
(删除的不是快照本身, 而是快照的名字)
匿名分支
可以用来做实验
checkout命令整理
有两种功能:
-
从暂存区域或历史快照拷贝到工作目录
git checkout HEAD~ --README.md //从快照的上一个版本复制过去 git checkout --README.md //直接从暂存区复制过去
-
切换分支