项目/仓库/版本库
初始仓库有一个名为 master 的默认分支
HEAD是一个指向当前正在工作的分支的指针
git版本控制系统
github仓库托管服务,并集成开发社区
本地仓库
远程仓库
本地仓库
工作目录(取决于仓库的当前正在工作的分支)
.git文件夹(git版本控制系统)
暂存区
每次提交,都会保存一份分支提交点的分支快照,以便在将来能够回到任意一次分支提交点上。
这个快照是分支文件的快照,而不是保存的差异,这采取的是一种以空间换时间的做法,理论上可以将仓库看成是有0到11111……的过程,而每次改变就是差异的累加,所以保存差异也就能够得到任意一次提交点了,但是这样复杂度过高,不利于维护,所以不采用这种方案。
提交:
1. 暂存区的差异一并提交到对应的版本库分支,每次提交生成一个标示本次提交的哈希值,这个哈希是“分布式计算的”所以能保证多机不会重复,并且这个哈希只取前几位(一般5~6位)都能取到,相当于可以简写吧。
2. 每次提交也会保存一份当前分支的文件快照(上面已经提到过)
3. 提交后,对应分支HEAD更新,向前推动一步。
4. 每次会将 -m 提交说明“更新到对应的全部差异文件中”(相当于解释这次为什么提交,以及此次提交时哪些变化发生了变化,文件夹也有这个提交描述,说明文件夹也被当文件对待了),需要注意的是,这个提交描述是与提交是对应的,也就是这个描述是指向提交的。
合并是一种同步
克隆也是一种“同步”
pull也是一种“同步”(其实也是一种合并)
(合并可能有多种合并方式,不同的合并方式产生不同结果,比如“均等合并”,“合并生成新分支”??????)
合并这个同步会使双方产生一个相同的“标记因子”
此后的每次提交都会试“标记因子”发生改变
当双方合并时发现双方的“标记因子”都已发生改变,都不是最初的,即后来都做过提交的话
那么就不能进行“快速合并”了,只能通过手动处理后在进行手动合并了。
合并后,双方的“标记因子”又一致了。
此后,循环往复此过程。
现在可是看出来了,“标记因子”其实就是提交哈希(分布式算法,保证不会重复)
对于每个分支的每个提交,哈希值都是唯一的。
实际上合并产生的一个相同的“标记因子”其实就是“一次合并提交”产生的一个相同的提交哈希。此时也认为两个分支是“相等(此刻文件上是相等的)”的。
要搞明白提交点,工作区未提交的到暂存区的修改,暂存区与分支,提交的关系,工作区是每个提交,每个分支独立的还是怎么处理的,必须把概念弄清楚,才能保证工作的可靠性。保证平时代码维护的工作。
git reset --hard ----
请在准备切换版本前检查当前工作状态,否则切换后将会丢失当前工作内容(当前工作区为提交到暂存区的修改,和当前暂存区),请谨慎使用会导致丢失当前工作内从的操作,否则后果自负!同时经常使用git status 检查当前工作状态也是好的习惯。(提示,关闭电脑,退出git bash不会影响工作内容,下次开始还能接着工作)
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
“[再用git status查看一下,现在暂存区是干净的,工作区有修改](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000)”上面可能有点说错了或表述有偏差。
**只有当工作状态是干净的,即工作区是干净的,暂存区也是干净的,才能说明当前工作完成了(当前工作目录和当前版本库文件一致),否则没完成工作,后果自负哦。**
>[info] git跟踪文件,应该是计算文件的哈希Hash的,当多次修改文件,但是文件内容最终没有变化时,git不会认为该文件发生了修改,所以git是跟踪文件内容的。这注意到这点,像Windows的记事本和Sublime Text则不是这样的,只要编辑了文件,那么输入一个字符,又马上删除了,文件内容没有发生改变,对编辑器来说,也认为你做了修改,如果你没有Ctrl+S保存关闭文件的则会提示你有未保存的修改,你必须先保存或者放弃更改才能关闭。(看云网页版的这个文档编辑器跟git差不多,就像是input change事件)
[这才是真正的Git——Git内部原理揭秘!](https://mp.weixin.qq.com/s/UQKrAR3zsdTRz8nFiLk2uQ)
[Tech Talk\_ Linus Torvalds on git](https://m.youku.com/video/id_XNTIxMjg3MzA0.html?spm=a1z3jc.11711052.0.0&isextonly=1&source=&ishttps=1)
- 说明
- git配置
- git与github的关系
- 基础概念
- git命令
- git init
- git status
- git diff
- git log
- git reflog
- git add
- git commit
- git reset
- git checkout
- git rm
- git stash
- git remote
- git push
- git clone
- git branch
- git fetch
- git merge
- git rebase
- git pull
- git tag
- 建立版本库
- 分支合并
- 远程库别名
- Pull requests
- 扩展知识
- 功能文件
- 差异看法
- 注意细节
- github移动端
- git工作系统理解
- 仓库嵌套问题
- 仓库的使用问题
- 常用命令
- 学习资料
- 学习总结
- 示例文件
- README.md
- CONTRIBUTING.md
- .gitignore
- coding
- 大小写问题
- 如何贡献
- 使用账号密码clone
- git目录分析
- HEAD
- 代码部署问题
- 开发流程
- 指定公钥文件