基础命令
提交
提交git commit
提交-包含信息git commit -m "message"
提交-省去add携带信息快速提交git commit -a -m "message"
提交-包含代码微改不希望上次提交记录同步git commit --amend
分支
创建分支git branch <NAME>
切换分支git checkout <NAME>
创建并切换分支git checkout -b <NAME>
合并
合并分支git merge <目标分支名称>
--目标分支与当前分支不同
合并到主分支git merge <目标分支名称>
--必要条件,当前分支为主分支
合并–创造线性的提交历史
注:把目标分支里的工作直接移到当前分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。
git rebase <目标分支>
高级命令
分离HEAD
git checkout <历史记录的hash值>
相对引用
注:通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有像本程序中这么漂亮的可视化提交树供你参考,所以你就不得不用 git log
来查查看提交记录的哈希值。
并且哈希值在真实的 Git 世界中也会更长(译者注:基于 SHA-1
,共 40 位)。例如前一关的介绍中的提交记录的哈希值可能是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8
。舌头都快打结了吧…
比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。因此我可以仅输入fed2
而不是上面的一长串字符。
使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。
相对引用非常给力,这里我介绍两个简单的用法:
使用 ^ 向上移动 1 个提交记录
使用 ~<num> 向上移动多个提交记录,如 ~3
父级有多条分支可以使用 ^<num>
进行选择,父级分支按先后顺序排列
撤销变更
在 Git 里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。
主要有两种方法用来撤销变更
git reset # 本地撤销,在reset后, C2 所做的变更还在,但是处于未加入暂存区状态。
git revert # 远程同步撤销,在我们要撤销的提交记录后面会多一个新提交!这是因为新提交记录 C2引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2' 的状态与 C1 是相同的。revert 之后就可以把你的更改推送到远程仓库与别人分享
自由移动提交记录
- git cherry-pick …
- git rebase -i <名称>
git rebase -i
的使用说明
参数 --interactive 的 rebase 命令, 简写为 -i。
Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。
当 rebase UI界面打开时, 你能做3件事:
调整提交记录的顺序(通过鼠标拖放来完成)
删除你不想要的提交(通过切换 pick 的状态来完成,关闭就意味着你不想要这个提交记录)
合并提交。 它允许你把多个提交记录合并成一个。
提交的技巧
使用自由移动提交记录的两种方法实现。主要用于提交顺序,记录是否删除
里程碑的使用
创建里程碑git tag <NAME>
(不加任何信息,为轻量级的tag)
查找最近里程碑git describe [NAME] --tags
– 缺省值为当前记录
tag有轻量级的和携带信息的
使用git tag
查看当前所有的tag。
查看tag详细信息显示可以使用 git tag -l --format='%(refname:short) %(type) %(creatordate:short)'