git merge
快进和快进有什么区别git rebase
?不要既保持历史线性又不合并提交?如果是这样,为什么一个人会使用另一种呢?如果不是,我认为这是真的,我没有看到的整个故事是什么?
谢谢!
git merge
快进和快进有什么区别git rebase
?不要既保持历史线性又不合并提交?如果是这样,为什么一个人会使用另一种呢?如果不是,我认为这是真的,我没有看到的整个故事是什么?
谢谢!
当你领先于主人时,两者都做同样的事情。
如果你领先和落后于 master,那么快进合并是不可能的,因为 master 上有更新的提交。但在这种情况下,您可以重新设置基础,根据在 master 之前的提交创建新的提交。
当你领先于主人时:
*E-*F-*G-*H-*I BRANCH
/
*A-*B-*C-*D MAIN
当您进行快进合并时,主指针将向前移动到分支的尖端。当你变基时,分支的每个提交都会移动到 MAIN 的头部之后。最终结果是一样的:
*A-*B-*C-*D-*E-*F-*G-*H-*I MAIN | BRANCH
当您领先和落后于 MAIN 时:
*E-*F-*G-*H-*I BRANCH
/
*A-*B-*C-*D-*J-*K MAIN
然后你不能快进将 E..I 合并到 main 中,因为 J..K 在路上。所以在这种情况下快进是不可能的。
但是您可以将 E..I 重新设置为 K:
*A-*B-*C-*D-*J-*K-*E'-*F'-*G'-*H'-*I' MAIN | BRANCH
但是会发生什么是包含 E 的更改并附加到 main 的新提交,然后使用 F 的更改进行新的提交并附加到 main... 等等,直到分支中的所有提交都已“移动” “/”在另一个分支上重播。结果又是一条没有分支和合并的历史记录。
因为必须重新应用提交并且潜在地解决了冲突,所以实际的提交将会改变,生成一个新的提交 ID 等等。