我有一个与开发人员团队合作的发展。我们决定创建一个分支功能'来自' master'我们将致力于推动您的工作。我做了一些我们必须做的事情,我想测试它。但同时一些重要的修补程序已经推进了主人因为主人有一些巨大的崩溃问题。我想利用这个修复,但我不想用它来污染功能分支。
正在做一个'功能'在主人的头上,一个好主意?我问这个问题是因为它结束了一个非常复杂的状态。
1 - 我们创建分支'功能'。这里是原始git存储库的图片。
----------------[commit1]---------[dev1]
^ ^
| |
{master} {feature}
2 - 然后在master和feature上完成了一些提交,但是所有的开发人员都没有推送他们所有的提交。
$git pull
$git branch feature
----------------[commit1]-------------------[hotfix1]
| ^
| |
| {master}
|
-------------[dev1]---- -------(dev2)
^ ^
| |
{feature} unpushed commit not yet in origin
3 - 我决定做一个rebase,同时推动其他提交。我已经解决了一些冲突
$git checkout feature
$git rebase master
(I resolve some conflicts)
$git commit -m "merge1"
$git rebase --continue
$git push
{feature}
|
v
--------[dev1']-------[merge1]
| /
----[commit1]-------------------[hotfix1] /
| ^ /
| | /
| {master} /
| /
-------------------[dev1]------------- ------------[dev2]
^ ^
| |
| unpushed commit not yet in origin
|
|
state of others after the rebase
4 - 另一位开发人员现在尝试推送他的提交dev2
$git fetch
(He got some conflicts)
$git commit - "merge2"
$git push
{feature}
|
v
--------[dev1']-------[merge1]-----------------[merge2]
| / /
----[commit1]-------------------[hotfix1] / /
| ^ / /
| | / /
| {master} / /
| / /
-------------------[dev1]-------------------------------[dev2]
^ ^
| |
| commit that was not pushed by another developper before the rebase
|
|
state of others after the rebase
有没有更好的方法来获取功能分支中的hotfix1?因为通过这种方式它似乎只是搞得一团糟。 知道我更喜欢不在分支功能中报告hotfix1,因为它修复了主分支中的错误,这在其他分支中没有任何意义(如果我想将dev1分支报告给V1分支)。
答案 0 :(得分:0)
Rebase通过复制提交工作。你的Git然后放弃了原件,转而使用闪亮的新副本。
任何拥有原件的 else 仍然拥有原件。如果你让他们拿起你的新副本,他们现在都有。 (当然,只要他们有原件,他们就可以编写自己的提交,这取决于原件。)
如果您和他们同意,您可以让他们拿起您的新副本并放弃他们的原件以支持新的原件。 (如果他们有自己的提交依赖于原件,他们可以将这些提交复制到更新,甚至更闪亮的提交。)但如果他们不同意,或者完全不知道这些问题,他们可能会感到困惑,合并他们的原件 - 无论有没有他们自己的补充 - 与你的新副本,并造成大混乱,并使其他人混淆。
所以这里的规则很简单:rebase共享提交当且仅当每个人都同意这一点,并理解如何使用他们的Gits。
有一个更简单的规则: rebase只有当你是唯一一个必须同意自己的人时。也就是说,只有当你的提交是“未发布”时。这个规则可能过于简单,你可以去看一个稍微复杂的版本,“当且仅当每个人都同意”。