强烈安利 Learn Git Branching,能够可视化学习Git指令。
基础篇
1. git commit
2. 新建分支
git branch <branchname> 新建分支
git checkout <branchname> 切换到分支
便捷:
git checkout -b <branchname> 新建并切换到分支
3.分支与合并
1.git merge
在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”
git merge <branchname> 将branchname分支合并到目前所在的分支
2.git rebase
Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史。
git merge <branchname> 将branchname分支合并到目前所在的分支
高级篇
1.在提交树上移动
HEAD:
-
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
-
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
-
HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。
分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名
git checkout tag_name指向某次提交,处于“detached HEAD"状态(不能改代码)
如果要在 tag 代码的基础上做修改,你需要一个分支:
git checkout -b branch_name tag_name
2.相对引用
通过指定提交记录哈希值的方式在 Git 中移动不太方便。可以通过 git log 来查查看提交记录的哈希值,但不直观,且哈希值很长。
比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。
比如fed2da64c0efc5293610bdd892f82a58e8cbc5d8可以只输入 fed2。
相对引用两个简单的用法:
-
使用
^向上移动 1 个提交记录-
首先看看操作符 (^)。把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。
-
所以
master^相当于“master的父节点”。master^^是master的第二个父节点,git checkout master^。也可以将HEAD作为相对引用的参照,git checkout HEAD^。
-
-
使用
~<num>向上移动多个提交记录,如~3git branch -f master HEAD~3
使用git checkout 来移动HEAD指针,移动的对象可以是分支指针也可以是快照。
使用git branch -f 来移动分支指针,移动的对象只能是快照。当且仅当HEAD指针指向分支指针的时候,提交才会有效。
3.撤销变更
git reset,git revert
移动提交记录
1.gitcherry-pick
git cherry-pick <提交号>...
如果你想将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了
2.交互式rebase
git rebase -i HEAD~3