BitKeeper ---->BitMover 2002-2005免费给Linux社区使用,2005年有人破解了bitKeeper的加密方案
SVN是集中式的
GitHub:代码存储完整和社区
Linux的Git:
分布式版本控制系统
Git下载:https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
Git安装:一路Next
Git配置:使用之前进行如下配置,运行->cmd
一、Git理论基础:
Git记录的是什么?
将每个版本独立保存
三棵树:工作区域(目录) 暂存区域 创库
Git创库:最终存放所有版本数据
Git的工作流程:
- 在工作目录下添加、修改文件
- 将所需进行的版本管理的文件放入暂存区域
- 将暂存区域的文件提交到Git创库
Git管理的文件有三种状态:
已修改
已暂存
已提交
二、实战
1、建立大本营
创建一个文件夹存放项目内容,cd 到该目录下,运行 git init
Git init---初始化,生成一个.git文件
生成的文件是Git用来跟踪管理版本迭代的,是git的核心
2.添加文件
git add 文件名 ---将文件添加到暂存区
git add * -----添加所有文件
git commit –m “说明” ---将文件提交到git创库
4.查看状态
git status
MIT协议
4. 工作区的数据还原为暂存区的内容
git checkout -- <文件名>
5.仓库的数据返回暂存区
git reset HEAD <文件名>(即暂存区返回原来的状态)文件名缺省,指最后提交的文件
6. 当工作区的数据修改了,执行git status ,会给出两种方案:
- 重新添加工作区域的数据
- 把暂存区域的数据还原到工作去
git log 查看历史提交数据记录
7.git reset HEAD~ 仓库的HEAD指针指向前一个版本,且将前一个版本数据返回暂存区
git reset HEAD~~或HEAD~2 仓库的HEAD指针指向前两个版本
8.Reset命令选项
git rest --mixed HEAD~
---移动HEAD的指向,将其指向上一个快照
---将HEAD移动后指向的快照回滚到暂存区域
默认情况下,带了mixed
git reset --soft HEAD~
---移动HEAD的指向,将其指向上一个快照,相当与撤销上一次的提交(错误的提交)
git reset --hard HEAD~(存在危险,把工作目录的文件覆盖)
---移动HEAD的指向,将其指向上一个快照
---将HEAD移动后指向的快照回滚到暂存区域
---将暂存区域的文件还原到工作目录
9. 回滚指定快照
可以指定快照ID
Git reset ID号前几位
回滚个别文件
git reset 版本快照 文件名/路径
不仅可以往会滚,还可以往前滚
git reset 快照版本
10. 如何找回以及提交文件的快照版本号
11.比较暂存区文件与工作区域文: git diff
+表示旧文件 –表示新文件
j表示向下一行 k表示向上一行
f表示一页往下移 b向上移一页
d u表示移动下、上半页
G g表示移动到文件最后、前
2g表示移动到第2行 以此类推
q 表示退出
比较两个历史快照:
git diff 快照ID 快照ID
git commit –am “描述” 直接将一个工作区域的文件添加到创库
比较当前目录和git创库中的快照:
git diff 快照ID
git diff HEAD 比较最新一份快照
比较暂存区域和git创库中的快照:
git diff --cached 快照ID 省略快照ID,表示创库HEAD指向的快照
12. 修改最后一次提交
Git commit –amend 提交最新文件并覆盖创库里最新的文件,并可以修改提交说明
i:进入
ESC –> :q! 退出不希望修改
ESC -> shift+zz 退出希望保存
如果说明显式乱码,git commit –amend –m “此处填写中文说明”
13. 删除文件
从工作目录中删除文件,利用git checkout -- 文件名:可以恢复
git rm 文件名 仅删除工作区域和暂存区域的文件,也就是取消版本跟踪,在下一次提交时不纳入版本管理
git reset --soft HEAD~ 从创库删除文件快照
暂存区域和工作目录的文件不同,使用“git rm 文件名”删除时,会提示文件不同,无法删除,并添加“-f”选项可以暴力删除: git rm –f 文件名
只删除暂存区域的文件,保存工作目录的文件:git rm --cached 文件名
14.重命名文件
git mv 旧文件名 新文件名
15.Git分支
创建分支:git branch 分支名称
git log --decorate 指向提交的所有引用
git log --oneline 精简显式
--graph 图形显式分支
--all 显式所有分支
切换分支: git checkout 分支名称
16.合并分支
Git merge 分支名
17.删除分支
Git branch -d 分支名,删除分支不会删除快照
18. 匿名分支
Git checkout HEAD~
提交三个文件,并让head指针指向第二个快照
提交第四个文件
查看创库结构
切换会主分支,提示第四个文件所在分支被隐藏,可以通过命令git branch 新分支名 对于快照号来建立一个分支
建立一个分支
19. Checkout 命令
git checkout READMD.md 文件名:将上一个快照中README.md复制到工作目录和暂存区域中
git checkout README.md如果没有指定具体的快照ID,则是将暂存区域恢复到工作目录, 约定:(--)后面跟的是文件名
checkout命令虽说可以切换分支,它事实上也是通过移动HEAD指针和覆盖暂存区域、工作目录来实现的
reset命令是用来“回到过去的”,reset命令将: 移动HEAD指定(--soft)-> 覆盖暂存区域(--mixed默认)-> 覆盖工作目录(--hard)
区别:
- 对于reset—hard命令来说,checkout命令更安全,因为checkout命令在切换分之前先检查下当前的工作状态,如果不是“clean“的话,Git不会允许你这样做,而reset—hard命令则是直接覆盖所有数据
- 如何更新HEAD指针,reset命令移动HEAD所有指针的指向,而checkout只会移动HEAD自身来指向另一个分支
- 创建github