基础篇:
分支提交 执行两次即可 git commit
创建分支 mian* git branch <branch_name>
查询分支git checkout <branch_name>
新版本为 : git switch <branch_name>
git commit
创建一个新的分支同时切换到新创建的分支 git checkout -b <your-branch-name>
分支与合并:
第二种合并分支的方法是 git rebase
。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
高级篇:
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
相对引用^
“~”操作符
如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。
该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。咱们还是通过实际操作看一下吧
相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。例如:
git branch -f main HEAD~3
上面的命令会将 main 分支强制指向 HEAD 的第 3 级父提交。
和 git checkout
搭配使用
Git Reset
git reset
通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
git reseat HEAD~1
Git 把 main 分支移回到 C1;现在我们的本地代码库根本就不知道有 C2 这个提交了。
(译者注:在reset后, C2 所做的变更还在,但是处于未加入暂存区状态。)
git revert
但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!
git cherry-pick <提交号>...
将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了。
交互式的 rebase
从一系列的提交记录中找到想要的记录。指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i
如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。
git rebase -i main HEAD~1
git commit amend 修改分离
git tag
git 的 tag 就是干这个用的啊,它们可以(在某种程度上 —— 因为标签可以被删除后重新在另外一个位置创建同名的标签)永久地将某个特定的提交命名为里程碑,然后就可以像分支一样引用了。
更难得的是,它们并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。
Git Describe
用来描述离你最近的锚点(也就是标签).
Git Describe 能帮你在提交历史中移动了多次以后找到方向;当你用 git bisect(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令.
下面两幅图效果一样
~ ^
Git Clone
远程仓库的拷贝
远程分支
Git Fetch
从远程仓库获取数据
Git Pull
git pull 相反的命令是什么呢?git push!
git push 负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成果了!
git pull 就是 fetch 和 merge 的简写,类似的 git pull --rebase 就是 fetch 和 rebase 的简写!
![p![u