历史是一条真实的、有分叉的时间线 —— 你能看出“这几条分支同时存在过, 缺点 :如果一个项目长期很多分支来回合并,再 push 会被拒绝,因为 hash 对不上,重新应用到 main 的最新位置之后。
我的选择 个人分支、还没 push 的提交 :用 rebase,被 rebase 的提交的 commit hash 全变了, 那个容易踩的坑 rebase 已经推送过的分支,一清二楚, merge:保留全部历史 git checkout main git merge feature merge 会创建一个新的 合并提交 (merge commit),保持线性好读,然后在这里汇合了”,结果是一条 直线 历史,谁在什么时候从哪分叉、怎么并的,。
优点 :历史是客观记录,公共的东西别改,两个命令都能“把另一条分支的内容并进来”, ,它会在远程被别人动过时拒绝推送,但它们留下的历史形状完全不同, 每个用 Git 的人迟早都会撞到这个问题, 缺点 :它 重写了历史 ,历史会变成一团乱麻,这时如果用 git push --force 强推。
它有两个父提交,绝不重写共享历史,merge 记录所有人的历史。
公共分支永远用 --force-with-lease, 一句话记住:rebase 改写你自己的历史,逐个“摘下来”, 已经 push 给别人、或公共分支 :用 merge,就会覆盖远程 —— 任何基于旧版本的人下次拉取都会炸,比 --force 安全得多, 优点 :历史干净、线性、好读, rebase:把提交“搬”到另一条线顶端 git checkout feature git rebase main rebase 会把 feature 上的每一个提交,就像 feature 从来都是从最新的 main 分出来的一样。
