git pull --rebase工作原理及推送后远程提交历史咨询
问题
我参与一个项目,克隆了仓库my_repo,其提交历史为A->B->C。
- 第1天:本地提交了
D但未推送; - 第2天:有人提交
E并推送到远程,远程提交历史变为A->B->C->E; - 第3天:执行
git pull --rebase后,本地提交历史变为A->B->C->E->D,但预期是按时间顺序的A->B->C->D->E。
请问:若推送本地变更,远程提交历史会如何?
解答
推送后的远程历史
推送完成后,远程仓库的提交历史会和你当前本地的历史完全一致,即:A->B->C->E->D。
关键原因
git pull --rebase的核心逻辑不是按提交时间排序,而是将你本地未推送的提交(D),以远程最新分支(A->B->C->E)为基准,重新生成提交并追加到该分支的顶端。这个过程相当于把D的修改内容"移植"到E之后,所以本地历史变成A->B->C->E->D,推送后远程会同步这个状态。
额外提示
如果在你推送前,没有其他开发者向远程推送新的提交,这次推送可以顺利完成;但如果远程已经产生了新的提交,你需要再次执行git pull --rebase处理可能的冲突后,才能完成推送。
内容的提问来源于stack exchange,提问作者tue2017
相关产品推荐
相关产品推荐

