我仍然不知道git pull --rebase究竟发生了什么。我理解变基的概念,我在我自己的本地未发布的分支中使用它,从来没有在我的分支已经在远程发布。我听说过使用遥控器进行转换的危险,并且看着git pull --rebase,我不太清楚它是如何安全的,或者这样做是不安全的。
比如说我正在MyBranch分支上工作,并且已经将它推送到远程,以便它存储在除我自己的本地机器之外的其他地方(并且可能其他人将合并我的更改以保持开发同步)。 / p>
a--b--c--d--g--h (master, origin/master)
\
e--f--i (MyBranch, origin/MyBranch)
说我做一些本地开发
a--b--c--d--g--h (master, origin/master)
\
e--f--i (origin/MyBranch)--j--k--l (MyBranch)
说别人用已经进入主人的开发更新MyBranch。
a--b--c--d--g--h (master, origin/master)
\ \
e--f--i---m( origin/MyBranch)
\
j--k--l(MyBranch)
如果我通过拉动git pull --rebase进行更新,我的树怎么样?它是否只会重写j,k,l(我当地的那些)的历史并将其置于m之上,还是会重写已经在远程分支上的其他历史记录?
rebase起点究竟是什么,重播是什么?
此外,如果将origin / MyBranch合并到其他上游分支中,例如“develop”,那么我的rebase的含义是什么?
a--b--c--d--g--h (master, origin/master) --n --o --p (origin/develop)
\ \ /
e--f--i---m( origin/MyBranch)--------------
\
j--k--l(MyBranch)
答案 0 :(得分:2)
评论,git pull --rebase
是:
git fetch
:此处您的远程跟踪分支origin/MyBranch
已更新)
a--b--c--d--g--h (master, origin/master)
\ \
e--f--i---m( origin/MyBranch)
\
j--k--l(MyBranch)
git rebase
:您在原点/ MyBranch
a--b--c--d--g--h (master, origin/master)
\ \
e--f--i---m( origin/MyBranch)
\
j'--k'--l'(MyBranch)
答案 1 :(得分:1)
我在本地工作中一直使用rebase。我遇到的最糟糕的问题是我合并错了。使用 git reflog 我恢复了上一次提交并再次重新设置,直到我做对了。
如果你觉得必须这样做的话,有些情况可以让人想到不要变硬或谨慎。
最后一点让我咬了一口气。我也倾向于使用 git rebase -i 。我有大约200次提交,并且正在仔细重新排序,分组和压缩提交,目标是降低到10次提交。
一个星期左右后,我意识到有一个问题,并希望与旧的东西进行比较。我尝试了reflog,但最老的提交是在我的变基础中。我很幸运,找到了我制作的克隆,但在那之后我学会了对rebase更加小心。