Git是基于文件的版本控制系统。
不同于其他的竞品,Git放弃了通过维护操作历史演化版本的架构方案,因此每次Fork项目时,并不需要对所有提交历史进行演化,具有很快的响应速度。
正常情况下,基于快照进行版本控制,会有大量占用存储空间的缺点,Git通过优秀的指针设计,来尽可能缩小了快照的占用空间,不会对重复内容进行多次快照存储。
Git的文件对比,是通过对俩份快照的内容的临时验算得到的结果,而不是通过对修改过程存储,获得的对照结果,所以无法仅在文件对比中体现文件中具体的提交演变历史。
Git的本地工作过程共有三种状态:
已提交(committed) 表示数据已同步至本地数据库
已修改(modified) 表示数据已经进行过修改(Hash值比对),并还未加入缓冲区
已暂存(staged) 表示数据已加入缓存区中,等待Commit后进行同步
工作目录 -> Git目录,会通过暂存区进行中转。
常规工作流程为:
# 提交暂存区数据,至本地仓库
git commit -m ${备注信息}
# 将记录撤销至指针位置,中间提交记录撤回缓冲区
git reset ${对象指针}
# 通过添加反向操作记录,对整体项目进行版本回滚。
git revert ${对象指针}
# 创建分支
git branch ${分支名}
# 将指定分支指针,强制迁移至当前指针
git branch -f ${分支名}
# 检出到指定分支 -b branch 创建并切换分支
git checkout ${分支名}
# 切换操作指针到指定节点
git checkout ${节点hash值}
# 通过指定对象的相对路径切换操作指针 ^ 代表父节点
git checkout ${对象}^
# 通过指定对象的相对路径切换操作指针向上迁移指定步数
git checkout ${对象}~${迁移步数}
# 将指定分支的修改,合并到当前分支,相当于将指定分支提交记录,同步一次
git merge ${分支名}
# 将当前分支合并到指定分支中。 与merge对应但不完全相反。
git rebase ${分支名}
# 交互式组织提交节点 -i interactive
git rebase -i ${对象指针}
# 摘取指定的节点,按顺序插入当前分支
git cherry-pick ${节点集}
原文:https://www.cnblogs.com/yzxmm/p/14675489.html