使用本地功能分支重新构建Git

时间:2018-08-14 07:56:21

标签: git merge branch rebase branching-and-merging

还没有找到针对我特定情况的答案,也无法针对现有解决方案提出解决方案。

因此,我有一个使用两个远程分支的存储库:

master
dev

在我的计算机上,它们与两个本地分支同步,而我有另一个本地分支,该分支未与远程同步:

master -> origin master
dev -> origin dev
feature

现在,首选的工作流程将是在本地 feature 分支上开发,如果完成,则提交并推送到原始 dev 。如果接受,则随后将其集成到 master 中。这样,两个分支应该或多或少地相同并且是最新的。 但是,现在我面临以下情况:

master    ...o=o=o=o=o=o=o=o=o=o=o=o
                 |
dev       ...o=o=o=o=o
                     |
feature   ...o=o=o=o=o=o

在散文中: Master dev (我的一个同事直接推到master上)的九个提交, dev 是两个提交 master 和本地 feature 分支的前面是 dev 的一个提交,而 dev 功能丢失了来自 master 的提交。

如何在不破坏历史的情况下立即回到正轨?

谢谢!

2 个答案:

答案 0 :(得分:1)

RomainVALERI解决方案没问题,就像他写的那样:“看起来不太漂亮”。您可以使用变基。谢谢重新整理,您的历史记录会更加干净。

git checkout dev
git rebase master
--> resolve potential conflicts 
git checkout feature
git rebase dev
--> resolve potential conflicts

您的情况现在看起来像这样(我将提交更改为“ m”和“ n”以更好地显示重新设置的工作原理):

master    ...o=o=o=m=m=m=m=m=m=m=m=m
                 |
dev       ...o=o=o=d=d

重新设置基准后,分支将如下所示:

master    ...o=o=o=m=m=m=m=m=m=m=m=m
                 |
dev       ...o=o=o=m=m=m=m=m=m=m=m=m=d=d

Git会将未推送的提交(名为d)回退到顶部。

“ M”项提交不会更改,将具有相同的sha-1,但“ d”项将会更改。

答案 1 :(得分:0)

我首先将master合并到dev中,并解决潜在的冲突以使dev保持最新,然后将dev合并到feature中以同样的效果。

在这一点上,feature是“最先进的”技巧,可以很容易地将其合并回去:feature >>> dev然后是dev >>> { {1}}。

再一次,您似乎更喜欢将rebase策略用于您的repo,如果是这样,我的解决方案将看起来不那么漂亮。