先分享几个比较好的文章
git
分布式和集中式差别
1,本地版本控制 2,可以重写提交说明 3,可以后悔 4,分支系统
git分为区域和对象
区域
- 工作区
- 暂存区
- 版本库
对象
- git对象
key:val组成的键值对(key是val对应的hash)
键值对在git内部是一个blob类型
- 树对象
git对象代表文件的一次次版本 ,树对象代表项目一次次版本
- 提交对象
初始化仓库
git init
git add . 先在版本库(object)生成git对象,然后将git对象放到暂存区 git hash-object -w 文件名 (修改了多少工作目录的文件,此命令就会被执行多少次)
git update-index
git commit -m ' ' 生成一个树对象,然后对树对象进行封装成提交对象
git write-tree
git commit-tree
linux命令
git init 初始化仓库
git add . 将修改添加到缓存区
git commit -m '' 将暂存区提交到版本库
git status 查看文件处于什么状态
git diff 查看哪些修改还没被暂存
git diff --staged 查看暂存有哪些改动
git commit -a 跳过暂存区直接提交到版本库
git log 查看提交记录
git log --pretty=oneline
git rm 删除工作目录对应的文件 在将修改添加到暂存区
git mv 将工作目录的文件进行重命名 再将修改添加到缓存区
分支操作
分支是指向最新提交对象的一个指针
git branch 显示分支列表
git branch 分支名 创建分支
git branch -v 查看最后一次提交
git branch -D 分支名 删除分支 不能自己删自己 大写D强制删除,小写d需要合并后删除
git branch 分支名 hash 新建一个分支并且指向这个提交对象
git checkout 分支名 切换分支
切换分支动的三个地方:head 暂存区 工作目录
每次切换分之前 当前分支一定得是干净的 (已提交状态)
坑:在切换分支时,如果当前分支上有未提交的暂存(第一次)或者有未暂存的修改(第一次),分支可以切换成功,并且文件会被带过去,这种操作可能会污染其他分支,如果提交过了,切换就会被警告
git merge 分支名 在主分支在上merge要被合并的分支
后悔药
工作区
如何撤回自己在工作目录中的修改
git checkout --filename
暂存区
如何撤回自己的暂存
git reset HEAD filename
版本库
git commit --amend 注释写错了 修改注释
如何撤回自己的提交
reset
第一步:git reset --soft HEAD hash 等同于(--amend) 只动head(待带着分支一起动,checkout 分支的时候不带分支)
带中括号是不是必须的
第二部:git reset [--mixed] HEAD~
动HEAD(带着分支一起动)
动了暂存区
第三部:git reset --hard HEAD~
暂存取和工作目录都变了
git checkout commithash 和 git reset --hard commithash
1,checkout只动head --hard动HEAD而且带着分支一起走
2,checkout对工作目录是安全的 --hard是强制覆盖工作目录
创建远程库
从本地项目向远程仓库提交
git remote add 名称 路径
git push 名称 分支名
git push -u origin master