use*_*661 5 git github bitbucket rebase
假设变基涉及两个分支A和B。我是唯一对这些分支进行更改的人,但还有其他人拉动这些分支只是为了查看正在发生的事情(审查)。他们根本没有/不会对这些分支进行任何更改。考虑到变基与合并的优缺点,变基显然是更好的选择
现在,关于 rebase 的 git 文档提到了关于 rebase 的黄金法则
git rebase 的黄金法则是永远不要在公共分支上使用它。
并解释为什么它可能很危险。
我了解变基和合并之间的区别,以及当其他开发人员提交到父分支时,事情会如何出错。
即使我是这两个涉及变基的分支的唯一开发人员,我是否应该避免这种情况?当我在变基后强制推送并且其他团队成员尝试拉出这些分支(同样只是为了查看它们,他们没有做出任何更改)之后,可能会出现什么问题?
要确定是否使用变基或合并,首先需要了解它们的工作原理。
在 git 中,提交是链表链,后一个提交引用了前一个提交。
C1<-C2<-C3<-C4
Run Code Online (Sandbox Code Playgroud)
当两个分支合并时,会创建一个新的合并提交(下面用 M1 表示)
C1<-C2<-C3
\ \
\ M1
\ /
C4<-C5
Run Code Online (Sandbox Code Playgroud)
其中有正在合并的提交的参考。这里的历史不再是一个链表。它已成为有向无环图。
Rebase 的工作方式有点不同
C1<-C2<-C3 branch1
\
C4<-C5 branch2
#On branch2
git rebase branch1
C1<-C2<-C3<-C4'<-C5'
Run Code Online (Sandbox Code Playgroud)
Rebase创建了两个新提交 C4' 和 C5',而不是 C4 和 C5,并将分支指针移至 C5'。这里的历史记录是干净的链表(因为您的分支提交被重新创建并应用于完成变基的分支),但是创建了两个新的提交,意味着branch2的历史记录发生了变化(之前是C1<-C4<-C5)。因此,每次执行 rebase 时都必须强制推送。
现在回答你的问题:
即使我是这两个涉及变基的分支的唯一开发人员,我是否应该避免这种情况?在最佳实践中,最好将功能分支与父分支变基,然后将功能分支合并到父分支,因为功能分支是您自己的分支,但父分支也会有其他开发人员提交,如果您变基,这些分支可能会丢失您的父分支具有功能分支,无需从远程拉取。
当我在变基后强制推动并且其他团队成员尝试拉动这些支撑后,可能会出现哪些问题?当强制推送时,它将变得非常糟糕,将本地系统上的任何历史记录推送到远程。如果您不使用强制推送,那么如果历史记录和提交转换不匹配,您的推送将被拒绝,并且您将被要求接受拉取。此外,如果您强制推送了父分支,而该分支有其他一些开发人员提交,并且未在本地计算机上拉取相同内容,那么该提交就会丢失。
如果其他开发人员尝试从远程拉取,他将遇到树冲突,因为他的本地历史记录将与远程历史记录不匹配。
| 归档时间: |
|
| 查看次数: |
5672 次 |
| 最近记录: |