Git指令

136 阅读3分钟

强烈安利 Learn Git Branching,能够可视化学习Git指令。

image.png

基础篇

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> 向上移动多个提交记录,如 ~3

    • git branch -f master HEAD~3

使用git checkout 来移动HEAD指针,移动的对象可以是分支指针也可以是快照。

使用git branch -f 来移动分支指针,移动的对象只能是快照。当且仅当HEAD指针指向分支指针的时候,提交才会有效。

3.撤销变更

git resetgit revert

移动提交记录

1.gitcherry-pick

  • git cherry-pick <提交号>...

如果你想将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了

2.交互式rebase

git rebase -i HEAD~3