一个有趣的 Git 练习网站

本文介绍了在Git中的实践练习,通过Learn Git Branching网站学习,重点涵盖Git的基本操作,如分支、合并、重置和提交管理。讨论了如何处理远程仓库的推送和拉取操作,以及解决远程服务器拒绝的问题。此外,还强调了Git的撤销变更、整理提交历史和使用Tag等高级技巧。
摘要由CSDN通过智能技术生成

BlueStragglers 共享技术成长的快乐

前一阵子整理一个 GitHub 项目,整得焦头烂额。

一个项目我只上传了一部分文件上去,等到想要上传剩下的部分时,却告诉我无法完成提交。

因为对 Git 的操作还不是特别熟练,所以我最后只能采用了一个笨方法:下载 GitHub Destop 拖拽式上传。

为了以后不再出现这种尴尬的事情,我决定好好复习 Git 知识。

于是,我就找到了这个有趣的 Git 练习网站:Learn Git Branching

image-20210625154024547

  • Git For Branching 界面。还是非常美观的。

经过学习后,我发现我的问题可能是 2.8 节所指出的,远程服务器的拒绝。

以下是我学习过程整理的记录。

1. 主要内容

1.1 Git 的思路

Git Commit 的提交记录保存的是文件快照,类似复制粘贴。

通过 diffing 算法,将当前版本与上个版本比较,并将差异保存起来作为提交记录。

Git 保存了提交历史记录。

// 提交
git commit

1.2 Git Branch

Git Branch 的分支思路也非常轻量化,仅仅指向某个提交记录。

建议早建分支,多建分支。

image-20210623095552620

建完分支后,要切换分支。可以用 checkout 命令。当然,checkout -b 可以创建的同时切换。

image-20210623095638258

image-20210623095759276

// 创建分支
git branch newImage
git commit
// 切换分支
git checkout newImage
git commit
// 创建并切换分支
git checkout -b bugFix

1.3 Git Merge

Git Merge 用于合并两个分支,会产生一个特殊节点,包含两个父节点。

image-20210623101910070

image-20210623160859786

image-20210623162530728

// 当前分支与目标分支合并
git merge bugFix
git checkout bugFix
git merge main
// 由于 main 的一个父节点是 bugFix
// 换句话说,main 继承自 bugFix
// 所以 Git 什么也没做

1.4 Git Rebase

Git Rebase 也是一种合并分支的方法。取出一系列提交记录,复制并放在另一个地方。

image-20210623163141161

image-20210623163403457

image-20210623163655238

// 合并分支,得到线性提交序列
git rebase main
git checkout main
git rebase bugFix
// 由于bugFix 继承自 main,所以 Git 只是简单前移了 main

1.5 如何在提交树上移动

HEAD:你目前正在工作的提交记录,一般指向当前分支的最近一次提交记录。

查看 HEAD 指向可以用 cat .git/HEAD。

image-20210623170429494

image-20210623170450258

// 调整 HEAD 指向具体的提交记录,而不是分支
git checkout C1

1.6 相对引用

通过指定提交记录的哈希值移动 HEAD 不是很方便,因为哈希值都很长。

可以用 Log 查看提交记录的哈希值。

相对引用就是可以从一个容易记忆的地方移动 HEAD。^向上移动一个提交记录如main^~<num>向上移动多个提交记录,如~3

也可以用 HEAD 作为相对引用的参照。

使用相对引用最多的是移动分支,可以在 Branch 上加一个 -f 改变分支指向的提交节点。

image-20210623171401146

image-20210623171818211

image-20210623171827920

// 查看日志
git log
// 找到 main 的父节点
git checkout main^
// 找到 HEAD 的父节点
git checkout HEAD^
// 让 main 分支指向 HEAD 的第三级父提交节点
// 可以说,git branch -f 和 git branch 内容都不一样
// git branch 是创建分支,而 git branch -f 是改变分支指向提交节点
git branch -f main HEAD~3
// 注意,不能写 git branch -f HEAD HEAD^,因为没有这个分支
// 只能用 checkout 调整 HEAD
git checkout HEAD^

1.7 撤销变更

可以通过 Reset 和 Revert 撤销变更。

Reset 相当于撤销历史。通过它可以回退本地的提交节点。但是无法处理远程分支。

Revert 用于撤销远程提交。这个过程引入了新的提交节点,因为这个节点做的事情是撤销上个提交节点的内容,所以和上上个节点的内容是一样的。

image-20210623194350488

image-20210623194401889

image-20210623195541690

image-20210623195731444

// 回退本地提交。只针对 local。
git reset HEAD~1
// 撤销远程提交。只针对 pushed。
git revert HEAD

1.8 整理提交记录

整理提交记录在处理复杂请求时十分重要。

Cherry-pick 可以用于将指定提交节点复制到 HEAD 分支上。

也可以用交互式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值