分支
git branch 新建分支
使用分支其实就相当于在说:“我想基于这个提交以及它所有的 parent 提交进行新的工作。”
git checkout 切换到指定分支
注意:在 Git 2.23 版本中,引入了一个名为 git switch 的新命令,最终会取代 git checkout,因为 checkout 作为单个命令有点超载(它承载了很多独立的功能)。
更简洁的方式:如果你想创建一个新的分支同时切换到新创建的分支的话,可以通过 git checkout -b 来实现。
分支与合并
git merge <你要合并的另一个分支>
在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个 parent 节点。翻译成自然语言相当于:“我要把这两个 parent 节点本身及它们所有的祖先都包含进来。
git rebase
取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
在提交树上移动
HEAD
HEAD 是一个对当前所在分支的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
分离的 HEAD
分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。
相对引用 git log 来查查看提交记录的哈希值。
根据哈希值进行移动 git branch -f <分支> <指定提交记录的哈希值位置>
“ ^ ” 操作符
相对引用非常给力,这里我介绍两个简单的用法:
- 使用 ^ 向上移动 1 个提交记录
- 使用 ~ 向上移动多个提交记录,如 ~3 git checkout <分支>^
“~”操作符
如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。
该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。
强制修改分支位置 可以直接使用 -f 选项让分支指向另一个提交。例如:
git branch -f main HEAD~3
上面的命令会将 main 分支强制指向 HEAD 的第 3 级 parent 提交。
撤销变更
主要有两种方法用来撤销变更 —— 一是 git reset,还有就是 git revert
git reset 通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。 git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
为了撤销更改并分享给别人,我们需要使用 git revert,新建一个和之前版本一样的新分支
远程仓库
git clone 命令的作用是在本地创建一个远程仓库的拷贝
远程分支
由于远程分支的特性导致其拥有一些特殊属性。 远程分支反映了远程仓库(在你上次和它通信时)的状态。 远程分支有一个特别的属性,在你切换到远程分支时,自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在别的地方完成你的工作, (更新了远程分支之后)再用远程分享你的工作成果。
Git Fetch
从远程仓库获取数据
Git 远程仓库相当的操作实际可以归纳为两点:向远程仓库传输数据以及从远程仓库获取数据。既然我们能与远程仓库同步,那么就可以分享任何能被 Git 管理的更新
git fetch 做了些什么 git fetch 完成了仅有的但是很重要的两步:
1.从远程仓库下载本地仓库中缺失的提交记录 2.更新远程分支指针(如 origin main)
git fetch 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。
git fetch 不会做的事 git fetch 并不会改变你本地仓库的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件。
Git Pull
git pull 就是 git fetch 和 git merge 的缩写!
Git Push
git push 负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成果了!

![[Git]常用命令,使用方法](/images/banner7.webp)

说些什么吧!