Git闯关游戏:Learn Git Branching Level 6-2 远程分支

337 阅读3分钟



Level 6-2 《远程分支》

2022-08-25_105726.png

这一关帮助你加深理解远程分支!

本地保存的远程分支只与远程仓库保持一致,不能在本地直接移动远程分支。不仅在游戏里学习,你还可以在真实环境中进行实验。



游戏答案:

# 在本地main分支做一次提交
git commit

# 切换到在本地保存的远程main分支
git checkout o/main

# 在远程分支上提交会出现HEAD分离状态,远程分支不会跟随新提交向前移动
git commit



创建远程仓库

你需要为这一关创建一个远程仓库,本文以gitee为例进行演示。

  1. 点击右上角加号创建仓库 image.png

  2. 为仓库命名
    这一步只起一个仓库名称即可,不要勾选其他选项 image.png

  3. 复制仓库地址
    image.png



准备实验环境

这里设置一个临时环境变量,保存你的远程仓库地址,也就是上面你复制的远程仓库地址,后面用到远程仓库地址时直接引用该变量:

set LGB_REMOTE=https://gitee.com/你的账户/你的远程仓库

下面命令完整CV到Windows cmd命令行窗口中执行:

# 准备一个空目录
mkdir level-6-2
cd level-6-2

# 初始化本地仓库,然后做两次提交
git init

echo 111>>a.txt
git add .
git commit -m "c0"
echo 222>>a.txt
git add .
git commit -m "c1"

# 本地仓库关联远程仓库,把远程仓库命名为origin(习惯名)
git remote add origin %LGB_REMOTE%

# 向远程仓库推送master分支
git push -f origin master

# 切换到上层目录
cd ../

下一步模拟你的同事在远程仓库中做了一次新提交,这样远程仓库前进了一步,而你自己的仓库进度落后了:

# 从远程仓库克隆,远程库克隆到一个临时文件夹
git clone %LGB_REMOTE% level-6-2-tmp

# 在临时本地库中做一次提交
cd level-6-2-tmp
echo 333>>a.txt
git add .
git commit -m "c2"

# 推送到远程仓库,这样远程仓库前进了一步
git push origin master

# 切换到上层目录
cd ../

# 删除临时文件夹
rmdir level-6-2-tmp /S /Q

# 切换回本地仓库目录
cd level-6-2

# 查看本地仓库的提交树
git log --graph --pretty=oneline --all

image.png

看到本地有两次提交。

再到远程仓库中查看一下远程仓库的提交状态:

  1. 看到远程仓库的进度比本地仓库多一次提交: image.png

  2. 点开提交列表看看: image.png

远程仓库进度比自己的本地仓库进度多了一个c2提交。



真实答案:

# 在本地master分支做一次提交
echo 444>>a.txt
git add .
git commit -m "c3"

# 切换到在本地存储的远程master分支,
# 再强调一下:后面不是直接在远程仓库中进行更改,我们是在访问“在本地存储的远程master分支”
git checkout origin/master

# 做一次提交
echo 555>>a.txt
git add .
git commit -m "c4"

这时会进入HEAD分离状态:

image.png

这是因为在“本地的远程分支”上提交时,它不会跟随新提交前进,它只与远程仓库中的分支保持一致!

# 查看提交树
git log --graph --pretty=oneline --all

可以看到,origin/master仍然停留在原来的位置,没有跟随新的提交c4前进:

image.png