Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有局部特征分支的Git-rebase_Git_Merge_Branch_Rebase_Branching And Merging - Fatal编程技术网

具有局部特征分支的Git-rebase

具有局部特征分支的Git-rebase,git,merge,branch,rebase,branching-and-merging,Git,Merge,Branch,Rebase,Branching And Merging,还没有找到我的具体案例的答案,也无法用现有的解决方案来解决 因此,我有一个使用两个远程分支的存储库: master dev 在我的计算机上,它们与两个本地分支同步,我有另一个本地分支,它没有与远程分支同步: master -> origin master dev -> origin dev feature 现在,首选的工作流是在本地功能分支上开发,如果完成,提交并推送到origindev。如果接受,随后集成到master中。这样,两个分支或多或少应该是相同的和最新的。 然而,现在

还没有找到我的具体案例的答案,也无法用现有的解决方案来解决

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

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

master -> origin master
dev -> origin dev
feature
现在,首选的工作流是在本地功能分支上开发,如果完成,提交并推送到origindev。如果接受,随后集成到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早两次提交,本地功能分支比dev早一次提交,而dev和feature都缺少Master的提交

我怎样才能在不打破历史的情况下回到正轨


提前谢谢

我首先将
master
合并到
dev
中,并解决潜在的冲突,使
dev
更新,然后将
dev
合并到
功能中,达到同样的效果

此时,
feature
是“最高级”的技巧,很容易合并回:
feature
>
dev
然后
dev
>
master


然后,你似乎更喜欢回购的重设基础策略,如果是这样,我的解决方案就不好看了。

我会先将
master
合并到
dev
中,并解决潜在的冲突以获得
dev
最新版本,然后将
dev
合并到
功能中,达到同样的效果

此时,
feature
是“最高级”的技巧,很容易合并回:
feature
>
dev
然后
dev
>
master


再说一遍,你似乎更喜欢回购的再基础策略,如果是这样,我的解决方案就不好看了。

Romanvaleri解决方案没关系,就像他写的:“看起来不好看”。您可以使用rebase。谢谢你的历史会更干净

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=m=m=m=m=m=m=m=m=m=d=d
Git将把未推送的提交(名为d)倒带到顶部


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

Romanvaleri解决方案没关系,正如他所写:“它看起来不漂亮”。您可以使用rebase。谢谢你的历史会更干净

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=m=m=m=m=m=m=m=m=m=d=d
Git将把未推送的提交(名为d)倒带到顶部


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

是否将“功能”合并到“开发”中,然后将“开发”合并/重定为“mastet”选项?@AndreaCarraro我不完全确定。我想重新设置基础,但是我需要将更改推回到远程分支,因为我的同事也需要它。所以我不应该这样做,对吗?在“开发”中合并“功能”,然后在“mastet”中合并/重新设置“开发”的基址是一个选项吗?@AndreaCarraro我不完全确定。我想重新设置基础,但是我需要将更改推回到远程分支,因为我的同事也需要它。所以我不应该这么做,对吗?但那会重写我的整个历史,这样我就无法推动它了,不是吗?不,它只会重写一些提交。我编辑我的答案是为了向您展示它是如何工作的。好吧,如果我在master上的远程更改之上重新调整dev上的本地更改,我没有弄乱历史记录,因为只有dev提交的SHA会更改,这还没有被推送吗?一个问题:您说dev比master提前两次提交。这两个提交已经被推送了?是的,所以dev有一些独特的提交,master没有,反之亦然。但这将重写我的整个历史,这样我就不能推送它了,不是吗?不,它将只重写一些提交。我编辑我的答案是为了向您展示它是如何工作的。好吧,如果我在master上的远程更改之上重新调整dev上的本地更改,我没有弄乱历史记录,因为只有dev提交的SHA会更改,这还没有被推送吗?一个问题:您说dev比master提前两次提交。这两个提交已经被推送了?是的,所以dev有一些唯一的提交,master没有,反之亦然。