git命令行练习地址:git命令行练习地址
提交修改记录,将暂存区的文件提交到本地仓库
git commit -m'提交的备注信息'
将工作区的文件提交到暂存区
创建分支,指针跟着切换
//当前在master分支
//创建
git branch <分支名>
git branch bugFix
//切换分支
git checkout <切换到分支名>
git checkout bugFix
//创建并切换分支
git checkout -b <分支名>
git checkout -b bugFix
合并两个分支时会产生一个新的特殊的提交记录,新的提交记录有两个父节点。指针指向新的提交记录
//当前在master分支
git merge <分支名(将这个分支合并到当前分支,合过来)>
//将bugFix分支合并到master分支,master分支含有bugFix分支的修改内容,新产生的提交记录在master分支上
git merge bugFix
未合并
合并后:执行git merge bugFix
练习
//先创建并切换到bugFix分支
git checkout -b bugFix
//提交一条记录:C2
//git commit
git commit -m '在bugFix分支上提交一条记录'
//再切换到master分支并提交一条记录:C3
git checkout master
git commit -m '在master分支上提交一条记录'
//再将bugFix分支合并到master分支上,产生一条新的记录:C4
git merge bugFix
Rebase 的优势就是可以创造更线性的提交历史。产生一个新的提交记录,只有一个父节点。
//当前在bugFix分支
git rebase <分支名(将当前分支合并到这个分支,合过去)>
//将bugFix分支合并到master,所产生的的新提交记录的父节点是在master分支上
git rebase master
未合并
合并后:执行git rebase master
再次合并:切换到master分支,再执行git rebase bugFix
练习:
//先创建并切换到bugFix分支
git checkout -b bugFix
//提交一条记录:C2
//git commit
git commit -m '在bugFix分支上提交一条记录'
//再切换到master分支并提交一条记录:C3
git checkout master
git commit -m '在master分支上提交一条记录'
//再切换到bugFix分支
git checkout bugFix
//合并到master,并产生一条新记录:C2`
//注意,提交记录 C2 依然存在(树上那个半透明的节点),而 C2' 是我们 Rebase 到 master 分支上的 C2 的副本。
git rebase master
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。
分离的 HEAD 就是让其指向某个具体的提交记录而不是分支名
操作前
操作后:执行
git checkout C1;git checkout master;//这两个可以不操作
git commit;git checkout C2
操作前:
操作后:执行git checkout C1
练习:
//分离出HEAD
git checkout C4
哈希值:基于 SHA-1,共 40 位;
通过指定提交记录哈希值的方式在 Git 中移动不太方便,相对引用从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。
使用 ^ 向上移动 1 个提交记录,放在引用参照后面,如master^,移动到
使用 ~ 向上移动多个提交记录,如 ~3
操作前:
操作后:执行git checkout master^
操作前
操作后:执行
git checkout C3
git checkout HEAD^
git checkout HEAD^
git checkout HEAD^
练习
//切换到bugFix分支
git checkout bugFix
//有多个方法实现
//1.
git checkout bugFix^
//2.
git checkout C3
操作前
操作后:执行git checkout HEAD~4
强制修改分支位置(移动分支),可以直接使用 -f 选项让分支指向另一个提交;
例如:git branch -f master HEAD~3:会将 master 分支强制指向 HEAD 的第 3 级父提交。
操作前
操作后:执行git branch -f master HEAD~3
练习:
//移动master
git branch -f master C6
//移动bugFix
git branch -f bugFix C0
//移动HEAD
git checkout C1