还没有找到针对我特定情况的答案,也无法针对现有解决方案提出解决方案。
因此,我有一个使用两个远程分支的存储库:
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 的提交。
如何在不破坏历史的情况下立即回到正轨?
谢谢!
答案 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,如果是这样,我的解决方案将看起来不那么漂亮。