git commit -m '描述' (git commit -am '描述')
HEAD
是一个对当前检出记录的符号引用,它指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 git 命令都是从改变 HEAD 的指向开始的。
HEAD 通常情况下是指向分支名的,在你提交时改变分支的状态,这一变化通过 HEAD 可以看到。
分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。
git checkout [提交记录hash值]
通过给定的提交记录哈希值的方式在 git 中移动很不方便,在实际中我们我们不得不通过 git log
查看提交记录的哈希值(虽然可以查找,但是这个值,不好读,也不好记)。
git 对哈希值进行了智能处理,你只需提供能唯一标识提交记录的几个字符即可,而不需整个值。
1.使用 ^
向上移动一个记录
2.使用 ~<num>
向上移动多个记录 // ~5
git checkout [分支名]^ (git checkout [分支名] HEAD~1)
git branch -f [分支名] HEAD~3 (强行改变分支)
和提交一样,在 git 里撤销变更的方法很多。撤销变更由底层部分(暂存区的独立文件或片段)和上层部分(由何种方式撤销)组成。
撤销变更有两种方法:
- git reset(本地仓库中适用)
它是通过让提交记录回退几次提交来实现撤销改动的。
它是向上移动分支,原来的提交记录就好像没有出现过一样。
git reset HEAD~2
- git revert (远程仓库中适用)
git revert HEAD
有时我们需要对提交记录的位置进行改动(尤其是我们在进行应用的功能按版本发布时,需要对提交的功能记录进行调整)。
整理提交记录,听起来很复杂,但操作起来很简单。
git cherry-pick <哈希值>...
如果想将一些提交复制到当前的位置(HEAD)下面的话,用这个命令正好。
当你知道你所需的提交记录的哈希值时,用 cherry-pick 是最优的方案;但是如果你不知道,你就需要使用交互式的rebase从提交记录历史中找出你所需要的记录。
交互式的rebase是指带参数 --interactive 的rebase命令,简写为 -i。
git rebase -i HEAD~2
我在开发中经常会遇到这样的问题,首先创建一个bug分支,然后为了方便调试而在代码中添加了一些调试命令并向控制台打印一些信息,同时让这些调试和打印都有各自的提交记录。问题解决后我们希望将bug分支合并到master分支,我们通过fast-forward快速的将bug分支合并到master分支,但我们同时也将调试语句合并到了master分支,显然这个调试记录不需要合并。
在这里我们使用整理提交记录的思想或者交互式rebase的思想都可以解决。
git cherry-pick <哈希值>...
git rebase -i HEAD~n
git操作可以参考:git 技巧使用