Learning git branching
merge
- 创建新分支
bugFix - 用
git checkout bugFix命令切换到该分支 - 提交一次
- 用
git checkout main切换回main - 再提交一次
- 用
git merge把bugFix合并到main
1 | git checkout -b bugFix |

rebase
操作:
- 新建并切换到
bugFix分支 - 提交一次
- 切换回 main 分支再提交一次
- 再次切换到 bugFix 分支,rebase 到 main 上
1 | git checkout -b bugFix |

分离 HEAD
1 | git checkout c4 |

相对引用
利用父节点
1 | git checkout HEAD^ |
寻找 bugFix 的父节点
1 | git checkout bugFix^ |

branch -f
强制修改分支位置
1 | git branch -f bugFix c0 |

或者
1 | git checkout c1 |

撤销变更
1 | git reset HEAD~1 |

cherry-pick
1 | git cherry-pick c3 c4 c7 |

交互式 rebase
1 | git rebase -i HEAD~4 |

只取一个提交记录
1 | git rebase -i main |

或者
1 | git checkout main |

提交的技巧
rebase 在上一次提交上amend
1 | git rebase -i main |

或者(多种方法尝试)
1 | git rebase -i caption~2 |
cherry-pick 在上一次提交上 amend
1 | git checkout main |

tag
1 | git tag v0 c1 |

多分支 rebase
1 | git rebase main bugFix |

两个parent节点
操作符 ^ 与 ~ 符一样,后面也可以跟一个数字。
但是该操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个 parent 提交。还记得前面提到过的一个合并提交有两个 parent 提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。
Git 默认选择合并提交的“第一个” parent 提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。
1 | git checkout HEAD~^2~ |

或者
1 | git branch bugWork HEAD~^2~ |

纠缠不清的分支
1 | git checkout one |

偏离的提交历史
1 | git clone |

或者
1 | git clone |

锁定的Main
1 | git reset --hard o/main |

推送主分支
1 | git fetch |

合并远程仓库
1 | git fetch |

远程跟踪
1 | git checkout -b side o/main |
或者
1 | git checkout -b side o/main |

push 的参数
1 | git push origin main |

push 的参数2
1 | git push origin foo:main |

fetch 的参数
1 | git fetch origin c3:foo |

没有 source 的 source
1 | git push origin :foo |

pull 参数
git pull 到头来就是 fetch 后跟 merge 的缩写。可以理解为用同样的参数执行 git fetch,然后再 merge 所抓取到的提交记录。
git pull origin foo 相当于:git fetch origin foo; git merge o/foo
git pull origin bar:bugFix 相当于:git fetch origin bar:bugFix; git merge bugFix
1 | git fetch origin c3:foo |
或者
1 | git pull origin c3:foo |
