git merge 和 git rebase 有什么区别?git pull 和 git fetch 呢?
先自己想一想,再看参考要点
参考要点
- 两者都能把 master 上的新提交合进 dev:merge 生成一个有两个父提交的合并提交,原有提交不变,历史保留分叉
- rebase 把 dev 上的提交逐个放到 master 最新提交之后重新提交,历史成为直线,但这些提交的哈希都变了,所以只对还没推送、只有自己用的分支变基
- git rebase -i 可以把本地多个提交合成一个。git fetch 只更新 origin/master 这类远程跟踪分支,本地分支不动
- git pull 等于 fetch 之后再合并,按 pull.rebase 配置或 --rebase 参数选择变基还是合并。撤销已推送的提交用 git revert 生成一个抵消的新提交,不要 reset 后强推