Git闯关游戏:Learn Git Branching Level 7-1 推送主分支

456 阅读3分钟



Level 7-1 《推送主分支》

2022-09-01_182052.png

这一关使用rebase将多个分支的提交合并到主分支,合并后得到一条连续的、更清晰的提交记录。不仅在游戏里学习,你还可以在真实环境中进行实验。



游戏答案:

# 从远程仓库下载新的提交
git fetch

# 将side1分支变基到o/main分支下
git rebase o/main side1

# 将side2变基到side1分支下
git rebase side1 side2


# 将side3变基到side2分支下
git rebase side2 side3


# 将main变基到side3分支下
git rebase side3 main

# 将本地仓库的更改推送到远程仓库
git push



创建远程仓库

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

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

    image.png

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

    image.png

  3. 复制仓库地址

    image.png



准备实验环境

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

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

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

# 准备一个空目录
mkdir level-7-1
cd level-7-1

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

# 向远程仓库推送
git push origin -f -u --all

# 创建并切换到side1分支,然后做一次提交
git checkout -b side1
echo 333>>a.txt
git add .
git commit -m "c2"

# 在上一个提交位置,新建并切换到side2分支,然后做两次提交
git checkout "HEAD^" -b side2
echo 444>>a.txt
git add .
git commit -m "c3"
echo 555>>a.txt
git add .
git commit -m "c4"

# 后退两个提交位置,创建并切换到side3分支,然后做三次提交
git checkout "HEAD~2" -b side3
echo 666>>a.txt
git add .
git commit -m "c5"
echo 777>>a.txt
git add .
git commit -m "c6"
echo 888>>a.txt
git add .
git commit -m "c7"

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

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

# 在临时目录,主分支做一次提交
echo 999>>a.txt
git add .
git commit -m "c8"

# 推送到远程仓库
git push

# 回上层目录,然后删除临时目录
cd ../
rmdir level-7-1-tmp /S /Q

# 回到本地仓库
cd level-7-1

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

image.png



真实答案:

# 下载远程分支
git fetch

# 将side1变基到 origin/master 分支下
git rebase origin/master side1

变基时出现文件冲突,需要松动修正文件后再继续:

image.png

# 手动修正a.txt后继续

git add .

# 提交时不重新编辑提交信息
git commit --no-edit

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

# 将side2的两个提交c3和c4变基到side1下
git rebase side1 side2

# 手动修正a.txt后继续

# 完成c3提交的变基操作后,继续进行c4提交的变基操作
git add .
git commit --no-edit
git rebase --continue

# 手动修正a.txt后继续

# c4变基完成,继续,最终完成
git add .
git commit --no-edit
git rebase --continue

# 将side3的c5,c6和c7提交,变基到side2下
git rebase side2 side3

# 手动修正a.txt后继续

# 完成c5变基后,继续
git add .
git commit --no-edit
git rebase --continue

# 手动修正a.txt后继续


# 完成c6变基后,继续
git add .
git commit --no-edit
git rebase --continue

# 手动修正a.txt后继续

# 完成c7变基后,继续,最终完成
git add .
git commit --no-edit
git rebase --continue

# master移动到side3位置
git rebase side3 master

# 向远程仓库推送本地仓库
git push -u --all

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

image.png