Git闯关游戏:Learn Git Branching Level 6-7 偏离的提交历史

315 阅读3分钟



Level 6-7

2022-08-31_170813.png

远程仓库被团队成员更新了,这时向远程仓库推送本地变更时会被拒绝,这时需要先下载远程仓库的最新变更,merge或rebase后再向远程仓库完成推送。

这一关远程仓库被更新了,本地提交与远程仓库不一致,需要使用git pull --rebase先下载远程最新提交,然后将本地提交变基到远程分支上,再完成推送。不仅在游戏里学习,你还可以在真实环境中进行实验。



游戏答案:

# 克隆远程仓库到本地
git clone

# 模拟远程仓库被团队成员更新了,添加了一个新的提交
git fakeTeamwork 1

# 在本地提交一次,这时与远程出现了变差
git commit

# 下载新的提交,再将本地分支变基到远程分支上
git pull --rebase

# 向远程推送
git push



创建远程仓库

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

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

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

  3. 复制仓库地址 image.png



准备实验环境

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

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

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

# 准备一个临时目录
mkdir level-6-7-tmp
cd level-6-7-tmp

# 初始化本地仓库
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%

# 向远程仓库origin推送
# -f 强制; -u 自动关联同名的远程分支; --all 所有分支
git push origin -f -u --all

# 到上层目录
cd ../

# 删除临时目录
rmdir level-6-7-tmp /S /Q



真实答案:

# 克隆远程仓库到一个新的文件夹
git clone %LGB_REMOTE% level-6-7

模拟团队成员更新了远程仓库提交,即游戏中的模拟命令git fakeTeamwork 1

# 克隆远程仓库到临时目录
git clone %LGB_REMOTE% level-6-7-tmp
cd level-6-7-tmp

# 在临时目录中做一次提交
echo 333>>a.txt
git add .
git commit -m "c2"

# 向远程仓库推送
git push

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

# 删除临时目录
rmdir level-6-7-tmp /S /Q

上面一步是团队成员在远程仓库中添加了一个新的提交,自己的本地仓库进度落后了。

这时远程仓库的提交状态:

image.png

继续:

# 回到自己的本地仓库目录
cd level-6-7

# 做一次提交,这时本地提交与远程仓库的提交出现了偏差
echo 444>>a.txt
git add .
git commit -m "c3"

本地提交与远程提交出现了偏差,可以查看一下本地的提交树:

git log --graph --pretty=oneline --all

image.png

这时向远程仓库推送会被拒绝,这里验证一下:

git push

image.png

继续:

# 下载远程仓库最新提交,然后将本地分支变基到远程分支上
git pull --rebase

这时会提示文件冲突,需要先手动修正文件后再继续:

image.png


# 手动修正a.txt后继续

# 生成新的变基后的提交
git add .
git commit -m "c3'"

# 继续,完成变基操作
git rebase --continue

# 向远程仓库推送
git push

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

image.png