2021-05-25_LearnGitBranching_沙盒操作闯关记录
闯关地址:https://oschina.gitee.io/learn-git-branching/?NODEMO
"主要"的关卡
第一关 : 提交
git commit
# 1、提交
git commit
# 2、提交
git commit
第二关: 新建分支
git branch
-
例子:新建分支
git branch bugFix
-
例子:切换到新的分支上——(git checkout -b )
git checkout
# 1、创建一个分支 bugFix 并且切换到此分支上
git checkout -b bugFix;
第三关: 分支合并
git merge
-
例子:把 bugFix 分支合并到 master 里
git merge bugFix
-
例子:把 master 分支合并到 bugFix 里
git checkout bugFix; git merge master
# 1
git checkout -b bugFix; git commit;
# 2
git checkout master; git commit;
# 3
git merge bugFix;
第四关:合并分支
git rebase
-
例子:把 bugFix 分支里的工作直接移到master分支上
git rebase master
-
例子:更新 master
git rebase bugFix
# 1
git checkout -b bugFix; git commit;
# 2
git checkout master; git commit;
# 3
git checkout bugFix;
# 4
git rebase master;
第五关: 在提交树上移动
-
例子:查看 Head 指向
git .git/HEAD
-
例子:若 HEAD 指向的是一个引用
git symbolic-ref HEAD
-
例子:
git checkout C1;git checkout master; git commit;git checkout C2
# 1、取出 HEAD 的内容
git checkout c4
第六关: 相对引用-1
-
例子:查看提交记录的哈希值
git log
-
例子:使用
^
向上移动 一个提交记录 -
例子:使用
~<num>
向上移动多个提交记录,如git checkout master~3
# 1
git checkout bugFix^
第七关: 相对引用-2
-
例子:将 master 分支强制指向 HEAD 的第 3 级父
git branch -f master HEAD~3
# 1
git branch -f master c6
# 2
git checkout HEAD~1
# 3
git branch -f bugFix HEAD^
第八关: 撤销变更
git reset
andgit revert
-
例子:Git 把 master 分支移回到 HEAD的父
git reset HEAD~1
-
例子:新提交记录
C2'
引入了更改 —— 这些更改刚好是用来撤销C2
这个提交的。也就是说C2'
的状态与C1
是相同的。git revert HEAD
# 1
git reset HEAD^
# 2
git checkout pushed
# 3
git revert HEAD
第九关: 整理提交记录
git cherry-pick <提交号>
`
-
例子:提交记录
C2
和C4
,所以 Git 就将被它们抓过来放到当前分支下了git cherry-pick c2 c4
# 1
git cherry-pick c3 c4 c7
第十关: 交互式的 rebase
git rebase -i
- 例子:git rebase -interactive HEAD~4
- 调整提交记录的顺序(通过鼠标拖放来完成)
- 删除你不想要的提交(通过切换
pick
的状态来完成,关闭就意味着你不想要这个提交记录) - 合并提交。
# 1
git rebase -i HEAD~4
第十一关: 本地栈式提交
-
git rebase -i
git cherry-pick
# 1
git rebase -i master
# 2
git rebase bugFix mater
or
# 1
git checkout master
# 2
git cherry-pick c4
第十二关:提交的技巧-1
- 需要在之前的版本中进行小修改。并且再次回到主分支中
- 先用
git rebase -i
将提交重新排序,然后把我们想要修改的提交记录挪到最前 - 然后用
commit --amend
来进行一些小修改 - 接着再用
git rebase -i
来将他们调回原来的顺序 - 最后我们把 master 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!
- 先用
# 1
git rebase -i HEAD~2
# 2
git commit --amend
# 3
git rebase -i HEAD~2
# 4
git branch -f master caption
# 4 or
git rebase caption master
第十三关:提交的技巧-2
- 需要在之前的版本中进行小修改。并且再次回到主分支中
- 先用
git rebase -i
将提交重新排序,然后把我们想要修改的提交记录挪到最前 - 然后用
commit --amend
来进行一些小修改 - 接着再用
git rebase -i
来将他们调回原来的顺序 - 最后我们把 master 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!
- 先用
# 1
git checkout master
# 2
git cherry-pick newImage
# 3
git checkout c1
# 4
git cherry-pick master
# 5
git branch -f master HEAD
# 6
git checkout master
# 7
git cherry-pick caption
or
# 1
git checkout master
# 2
git cherry-pick newImage
# 3
git commit --amend
# 4
git cherry-pick caption
第十四关:Git Tags
- 有没有什么可以永远指向某个提交记录的标识呢,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性,有没有比分支更好的可以永远指向这些提交的方法呢?
- git tag v1 c1
- 我们将这个标签命名为
v1
,并且明确地让它指向提交记录C1
,如果你不指定提交记录,Git 会用HEAD
所指向的位置。
- 我们将这个标签命名为
# 1
git tag v0 c1
# 2
git tag v1 c2
# 3
git checkout v1
or
# 3
git checkout c2
第十五关:Git Describe
git describe <ref>
- 用来描述离你最近的锚点(也就是标签)
# 1
git describe master
# 2
git describe side
# 3
git describe bugFix
# 4
git commit
第十六关:多分支 rebase
git bisect <ref>
- 一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令
# 1
git rebase master bugFix
# 2
git rebase HEAD side
# 3
git rebase side another
# 4
git rebase another master
第十六关:选择父提交节点
git checkout master^
- 在我们的图示中,第一个父提交记录是指合并提交记录正上方的那个提交记录。
git checkout HEAD~^2~2
# 1
git branch bugWork master^^2^
or
# 1
git branch bugWork HEAD^^2^
第十七关:纠缠不清的分支
git checkout master^
- 在我们的图示中,第一个父提交记录是指合并提交记录正上方的那个提交记录。
git checkout HEAD~^2~2
# 1
git checkout one
# 2
git cherry-pick c4 c3 c2
# 3
git checkout two
# 4
git cherry-pick c5 c4 c3 c2
# 5
git branch -f three c2
目前已完成的为:
-
"主要"中的:
- 基础篇
- 高级篇
- 移动提交记录
- 杂项
- 高级话题
-
“远程”中的:
- Push & Pull —— Git 远程仓库
- 关于 origin 和它的周边—— Git 远程仓库高级操作