Git
主要的基础命令
git commit
在对工程代码进行提交时,并不是将目录所有文件全部一股脑的复制粘贴到仓库中,而是将当前版本与仓库中的上一个版本进行对比,把所有差异部分打包作为一个提交记录。
git branch
分支简单来说就是指向某个提交记录的路径,可以按逻辑分解原工作到不同的分支从而并行开发,这样也便于版本的维护。
创建一个新的分支的同时切换到所创建的分支:
git checkout -b <branch-name>
git merge
将两个不同的分支合并到一起,会产生一个特殊的提交记录,它有两个父节点,并包含了两个父节点的所有文件。
git rebase
这是另一种合并分支的方法,实际上是取出一系列的提交记录并复制它们,然后在另一个地方逐个放下去。
高级命令
分离HEAD
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
相对引用
通过指定提交记录哈希值的方式在 Git 中移动不太方便。而采用相对引用,就可以从一个易于记忆的地方开始计算。
- 使用
^
向上移动 1 个提交记录 - 使用
~<num>
向上移动多个提交记录
撤销版本变更
git reset / git revert
git reset
通过把分支记录回退几个提交记录来实现撤销改动,可以想象为改写历史,不过仅对本地分支有效。
git revert
是可以对远程分支进行撤销操作的。
整理提交树
git cherry-pick<提交号>
使用此命令可以将任意提交复制到当前所在的位置(HEAD)下,提交号也就是某个提交记录的哈希值。
交互式rebase
指的是带有参数--interactive
的rebase命令,简写为-i
,使用时git会打开一个UI界面并列出将要被复制到目标分支的备选提交记录,以及显示每个提交记录的哈希值和提交说明。
git tag
它可以永久的将某个特定的提交命名为里程碑(如软件新的大版本,或是重要bug的修复),就像一个特殊标记一样。并且它们并不会随着新的提交而移动,你也不能切换到某个标签上面进行修改提交。
git describe
该命令能帮你在提交历史中移动了多次以后找到方向。<ref>
可以是任何能被识别为提交记录的引用。命令的输出结果形式为<tag>_<numCommits>_g<hash>
,tag表示的是离ref最近的标签,numCommits是表示这个ref与tag相差有多少个提交记录,hash表示的是你所给定的ref所表示的提交记录哈希值的前几位。
远程仓库
git clone
在本地创建一个远程仓库的拷贝。
git fetch
从远程仓库下载本地仓库缺失的提交记录,并更新远程分支指针,也就是说它将本地仓库中的远程分支更新成了远程仓库相应分支的最新状态。不过它并不会改变本地仓库的状态。
git pull
git fetch
和git merge
的结合,将远程仓库中的记录下载下来并合并。
git push
将你的变更上传到指定的远程仓库,并合并新的提交记录。