TL; DR版本:有没有人使用git pull --rebase
。
如果我理解正确,就有这种情况。
A - B - C [m]
\
D - E - F [f]
\
G - H - I [d]
m为主,f为特征分支,d为开发分支。您希望能够将f重新分配给m,并将其重新分配给新的f。
G1 - H1 - I1 [d]
/
D1 - E1 - F1 [f]
/
A - B - C [m]
\
D - E - F
\
G - H - I
答案是有大家git pull --rebase
这相当于一个git fetch
加上git rebase
。这是如何工作的。这是存储库在推送到主服务器之后的样子(提交C)的样子。
origin
A - B - C [m]
\
D - E - F [f]
\
G - H - I [d]
feature branch maintainer
A - B [m][o/m]
\
D - E - F [f][o/f]
\
G - H - I [o/d]
dev branch maintainer
A - B [m][o/m]
\
D - E - F [o/f]
\
G - H - I [d][o/d]
特征分支维护者决定更新它的时间,所以他们git pull --rebase origin master
。这是一个git fetch origin
加上git rebase origin/master
。造成这种情况。
feature branch maintainer
D1 - E1 - F1 [f]
/
A - B [m]- C [o/m]
\
D - E - F [o/f]
\
G - H - I [o/d]
然后,他们git push origin
(我相信他们会需要强制),这是结果。
origin
D1 - E1 - F1 [f]
/
A - B - C [m]
\
D - E
\
G - H - I [d]
feature branch maintainer
D1 - E1 - F1 [f][o/f]
/
A - B [m]- C [o/m]
\
D - E
\
G - H - I [o/d]
dev branch maintainer
A - B [m][o/m]
\
D - E - F [o/f]
\
G - H - I [d][o/d]
现在开发分支维护人员想要更新,幸福地不知道任何事情发生在功能分支。他们git pull --rebase
相当于git fetch origin
和git rebase origin/feature
。取回后它看起来像这样。
dev branch maintainer
D1 - E1 - F1 [o/f]
/
A - B [m]- C[o/m]
\
D - E
\
G - H - I [d][o/d]
然后git rebase origin/feature
。
dev branch maintainer
G1 - H1 - I1 [d]
/
D1 - E1 - F1 [o/f]
/
A - B [m]- C[o/m]
\
D - E
\
G - H - I [o/d]
他们可以推动,可能与--force
。
你会注意到开发分支在F1上,而不是E1,因为它原来是。如果你想保持,你必须专门到E1。
如果混帐无法弄清楚,d和E是不是真正的Dev分支的一部分,你可能会风与此。
dev branch maintainer
D2 - E2 - G1 - H1 - I1 [d]
/
D1 - E1 - F1 [o/f]
/
A - B [m]- C[o/m]
\
D - E
\
G - H - I [o/d]
的Git应该能想出解决办法使用“修补程序ID”,这就像提交身份证,但他们只检查剩下的内容和无法比拟的。如果不行,请尝试更新Git并查看是否有帮助。如果它仍然无法做到,那么你在git-rebase文档中称之为“困难的情况”。你必须拼出Git,你需要使用--onto
来兑换。幸运的是,reflog将特征分支的前一个位置包含为f @ {1},您可以将其用作参考。
git rebase --onto f [email protected]{1}
即说变基当前分支(d)到女,但从d只变基至f @ {1}(这是其中f曾经是)。
我已经git pull --rebase
别名为git repull
。我几乎完全这样做,这是相当安全的,通常是正确的。您可以使用git config --global pull.rebase true
将其配置为默认值。
欲了解更多信息,请参阅Recovering From An Upstream Rebase in the git-rebase
docs。
你提到了一个拉请求,你对这些使用什么? Github上?你可以通过“弄脏请求”来扩展你的意思吗? – Schwern 2015-03-02 20:02:34
我们使用github企业,但这与问题无关。开发者分支和功能分支的比较会显示一个已经存在的提交列表 - 这仅仅是git不能识别提交散列。 – helion3 2015-03-02 20:09:48