git笔记
摘要
git操作内容简介:一些基本的概念,命令,分支的关系,分支的处理等。
参考:https://git-scm.com/book/zh/v2
概括
- git基本介绍
- git基本命令
- 分支管理
- 常用功能
- 远程仓库
- 整理提交历史(变基)
基本操作
git优势
- 分布式控制系统:服务器和本地均具有完整的操作记录,本地可工作。
- 可以和不同的远程交换
- 非线性(多人协作),和svn对比(svn是线性)
- git很快,大部分是本地操作
- 快照记录:版本记录会记录修改文件,没有修改,不会提交。(增量记录)
- hash值,赋予版本号 SHA-1
- 网上教程:https://www.runoob.com/git/git-install-setup.html
git基本命令
- git init 初始化, idea 不同目录可以不同git管理
- git add 添加文件管理。 .idea文件处理.gitignore配置文件(忽略管理)
- 文件状态
- 未跟踪:加到扫描列表中,忽略文件,转一暂存
- 未修改:add -> 已修改,
- 已修改:commit -> 暂存
- 已暂存:publish -> 已提交
- 已提交:
- 已删除:
- 文件状态
- git commit 文件提交,
- idea中add,commit命令合并: commit -am “”,左下角可以看到git提交记录,可以搜索提交记录,
- git: 创建快照
- reset: 回退到本次操作前的快照,到工作区,
- checkout,切换到某个时间点,或者展开文件列表,checkout方式返回
- reset 回退
- hard-无视本地一些修改,直接回退到选择的提交点,之后的提交点消失。(基于分支的改动,慎用)。类似于时间线(提交点链表),回退之后会丢失之后的时间线。
- mixed,soft-不会实质性的撤回任何改动,视为本地改动,新建提交点,进行相反的操作。
- keep-回到时间点,后续丢失,但是不修改本地未提交的内容。hard上进行的一些改动。
分支
- 分支概念:
- 指针,指向提交点的指针。
- 默认本地分支:master,没有任何特殊含义。
- HEAD,特殊分支,就是你现在工作区所处的分支,通过HEAD可以拿到你本地的工作区的分支,类似于this。
- git branch (branchname) 新建分支
- 名字:小写单词,有意义的,
- checkout (name) 切换分支
- revert,等价于checkout,revert可以回到过去的分支
- git merge,分支合并,当前分支合并到目标分支。
- 有新内容:合并(产生新的融合点,产生新的提交)
- 没有新内容:指针移到最新的提交点。(快进模式)
- 分支冲突:
- 两个分支的,不同的提交点,对同一个文件进行了改动。
git进阶
常用功能
- 暂存:(stash和shelve)
- stash git提供
- shelve idea提供,功能更强大,(工作区不干净,会自动处理)
- 未提交的修改保存到暂存区,并将工作区恢复到上次提交的初始状态
- 使用场景
- 代码写错分支
- 修复紧急bug
- 多版本分支同时维护
- 代码补丁
- 这里说idea提供的
- git版本,略
- patch,选取一个或多个提交点,右键点击patch,形成普通文件,用于传输或发送到远端,使用idea来导入,即可在远端引用
- git不能介入的场景
- 标签功能
- tags,不能修改的分支,一般用作版本号。
- 本质是一个提交点,使用标签记录。
- 轻量标签:轻量级,只有一个名字(常用)。
- 附注标签:重量级(记录太多,不常用)。
- 挑拣
- 选择一个提交点,打成补丁,应用到本地分支。
- 仅支持一个提交点
- 版本号会不同(新的提交点)
- cherry park
- 变基
- 改变分支提交点,基于其他分支。
- 列子:功能分支要整合主分支的提交,这样HEAD在功能分支,对主分支执行变基即可。效果是:主分支的提交点顺序不变,功能分支提交点按照主分支提交点进行了更新,功能分支的提交点向后放置。
- 找到两分支共同祖先,对当前分支挑拣。
- 单向的,双向容易出问题。
- rebase
- 线性分支处理(看要求)
- 代码补丁
- 挑拣
- 变基
远端仓库
- 通信协议
- 本地协议:远程仓库在本地文件夹
- http协议:
- 使用用户名密码
- ps: 可以使用docker创建git私服
- ssh协议
- 配置ssh密钥
- git协议
- 远程分支和本地分支
- 本地跟踪远程
- 远程分支不会主动更新,不能在本地移动
- checkout远程分支得到的是他的本地跟踪分支。
- 远程分支可以被合并,挑拣,变基
- 更新
- 拉取fetch,之后再进行后续处理,刷新的意思
- 拽取pull
- 推送:push
重写历史
- git提交整理
- 追加提交
- Amend:提交的时候勾选就行,作为上次的补充提交,整合到一个提交点。
- 修改提交信息
- 合并提交点
- 将联系多个提交点,合并未1个提交点
- 需要重新设置提交信息
- squash和fixup都可以合并提交点
- fixUp,后面都是追加提交
- squash, 修订加合并提交信息
- 删除提交点
- drop commit:删除提交点。
- revert:创建新提交点,抵消指定的提交点。
- 交互式变基
- 以上操作,均可以在此执行
- reset和revert注意区分
- reset:基于提交点的,重置(时间回溯,ctrl+z)
- revert: 撤销某次提交点
ps:
- 禁止修改已经推送远程分支
- 禁止修改别人的分支历史
- 修改历史基于变基实现的,修改后需要强制推送
- 追加最后一个点
- 仅在开发完成在推送前提交