Git 学习打卡
基础篇
git commit:将当前版本与仓库中上一版本进行对比,把所有的差异打包作为一个提交记录。git branch **:分支非常轻量,只是简单地指向某个提交记录。git checkout **:切换到新的分支上。git checkout -b **:创建一个分支同时切换到该分支。git merge **:把**分支的修改合并到当前分支,并生成一个新的合并提交。这个合并提交会同时指向两个分支的最新提交,保留了分支的 “分叉” 历史。git rebase **:将当前分支的所有提交 “移动” 到**分支的最新提交之后,相当于以**分支的最新状态为 “新基准”,重新应用当前分支的修改。不会生成新的合并提交。

高级篇
1.分离的 HEAD
- HEAD :对当前分支的符号引用,总是指向当前分支最近一次提交记录。
- 分离的 HEAD :让其指向某个具体的提交记录而不是分支名。


2.相对引用
- 通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。
- 使用
^向上移动 1 个提交记录。如git checkout main^^。tips:可以一直使用HEAD^向上移动。 - 使用
~数字向上移动多个提交记录,如 ~3。 -f选项让分支指向另一个提交。
- 使用
- 强制修改分支位置:
git branch -f main HEAD~3会将 main 分支强制指向 HEAD 的第 3 级 parent 提交。
3.撤销变更
- 本地——
git reset:通过把分支记录回退几个提交记录来实现撤销改动。

- 远程——
git revert:
远程篇
git clone:在本地创建一个远程仓库的拷贝(比如从 github.com)。
1.远程分支
- 命名规范:<remote name>/<branch name>。
- 反映了远程仓库在你最后一次和它通信时的状态。
- 远程分支有一个特别的属性,在你切换到远程分支时,自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在别的地方完成你的工作, (更新了远程分支之后)再用远程分享你的工作成果。

2. git fetch
- Git 远程仓库的操作可以归纳为两点:向远程仓库传输数据以及从远程仓库获取数据。

git fetch完成了仅有的但是很重要的两步:- 从远程仓库下载本地仓库中缺失的提交记录。
- 更新远程分支指针(如 o/main)。
git fetch实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。git fetch通常通过互联网(使用 http:// 或 git:// 协议) 与远程仓库通信。
git fetch并不会改变你本地仓库的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。你可以将git fetch的理解为单纯的下载操作。
3. git pull
- Git 提供了一个专门的命令来完成先抓取更新再合并到本地分支这两个操作——
git pull。 它就是git fetch和git merge的缩写!
4. git push
git push负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦git push完成, 你的朋友们就可以从这个远程仓库下载你分享的成果了!
注意:
git push不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关。它的默认值取决于你正使用的 Git 的版本,但是在教程中我们使用的是 upstream。 这没什么太大的影响,但是在你的项目中进行推送之前,最好检查一下这个配置。


