【learnGitBranching】02高级篇

GitHub最受欢迎的交互式Git学习教程

  • 在线学习地址:https://pcottle.github.io/learnGitBranching/
  • 仓库地址:https://github.com/pcottle/learnGitBranching

分离 HEAD

学习在项目的提交树上前后移动的几种方法

教学

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

  • HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

  • HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

演示

  • git checkout C1; git checkout main; git commit; git checkout C2

    • HEAD 指向了 main,随着提交向前移动。
    • 注意这部分代码并不是真的在查看 HEAD 指向。
    • 如果想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。
  • 分离头指针HEAD:让其指向了某个具体的提交记录而不是分支名。

    • 刚开始指向HEAD -> main -> C1
    • git checkout C1
    • 变成了HEAD -> C1
    • 这就是译者注里面说的不是真正的查看HEAD指向

练习

bugFix 分支中分离出 HEAD 并让其指向一个提交记录。

——通过哈希值指定提交记录。每个提交记录的哈希值显示在代表提交记录的圆圈中。(C1C2之类的)

git checkout C4

相对引用1(^)

教学

  • 实际中提交并非C1C2……而是一串哈希值(40位)。只需要提供能够唯一标识提交记录的前几个字符即可
  • 但这样还是很不方便,使用相对引用可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。
    • 使用 ^ 向上移动 1 个提交记录
    • 使用 ~<num> 向上移动多个提交记录,如 ~3

演示

main^main 的父节点,main^^main 的第二个父节点

  • git checkout main^ ——切换到当前main分支提交的父节点
  • 也可以将 HEAD 作为相对引用的参照:git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^——一直使用HEAD向上移动

练习

切换到 bugFix 的父节点。这会进入分离 HEAD 状态。

git checkout bugFix^

相对引用2(~)

教学

该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。

演示

后退四步

  • 连续向上后退四个:git checkout HEAD~4
  • 直接使用 -f 选项让分支指向另一个提交
    • git branch -f main HEAD~3 将 main 分支强制指向 HEAD 的第 3 级父提交。

练习

移动 HEADmainbugFix 到目标所示的位置

这一关至少要用到一次直接引用 (即哈希值)

2-1

git checkout HEAD^
git branch -f main C6
git branch -f bugFix bugFix~3

撤销变更

教学

撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。

主要有两种方法用来撤销变更 —— 一是 git reset,还有就是 git revert

演示

Git Reset

通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。

  • git reset HEAD~1:把 main 分支移回到 C1;现在本地代码库根本就不知道有 C2 这个提交了。
    • 这种“改写历史”的方法对大家一起使用的远程分支是无效的

Git Revert

撤销更改并分享给别人

  • git revert HEAD:要撤销的提交记录C2后面多了一个新提交C2'
    • 新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。
    • 也就是说 C2' 的状态与 C1 是相同的。

练习

分别撤销 local 分支和 pushed 分支上的最近一次提交。共需要撤销两个提交(每个分支一个)。

记住 pushed 是远程分支,local 是本地分支

git reset HEAD^
git checkout pushed
git revert HEAD
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GitLab中,可以使用命令`git clone`来下载代码。默认情况下,下载的是默认分支,通常是`master`或`main`分支。例如,使用以下命令来克隆代码: ``` git clone https://github.com/pcottle/learnGitBranching.git ``` 如果你想下载其他分支的代码,可以在命令中指定分支名称。例如,要下载名为`feature-branch`的分支,可以使用以下命令: ``` git clone --branch feature-branch https://github.com/pcottle/learnGitBranching.git ``` 另外,如果你想下载所有分支的代码,可以使用`--bare`选项来克隆代码,并将下载后的文件夹重命名为`.git`。具体步骤如下: 1. 创建一个空文件夹: ``` mkdir repo ``` 2. 进入该文件夹: ``` cd repo ``` 3. 使用`--bare`选项来克隆代码,并将下载后的文件夹重命名为`.git`: ``` git clone --bare path/to/repo.git .git ``` 4. 执行以下命令来取消`core.bare`的设置: ``` git config --unset core.bare ``` 5. 执行以下命令来查看仓库中的内容: ``` git reset --hard ``` 这样,你就可以下载所有分支的代码了。 另外,根据环境的不同,你可以定义不同的bug分支。例如,在测试环境中,可以从`develop`分支上创建名为`fix-xxx`的分支;在正式环境中,可以从`master`分支上创建名为`hotfix-xxx`的分支。这样可以更好地管理分支和解决bug。 希望以上信息对你有帮助! #### 引用[.reference_title] - *1* *2* [git clone 下载所有分支](https://blog.csdn.net/kanyun123/article/details/116749871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Gitlab 分支管理规范](https://blog.csdn.net/luck_xin_IT/article/details/115058927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值