所以这是交易,我正在使用git和Bitbucket作为我的应用程序。我正在使用git-flow系统进行git。所以背景是这样的。我有一个名为release/v1.0.2
的发布分支已经开放了一段时间(我的用户目前正在测试1.0.2)。同时beta测试1.0.2我已经开始实现两个新功能,让我们称他们为feature/feature1
和feature/feature2
。
今天我决定使用feature1和feature2完成,并且v1.0.2的beta测试也已完成。所以我做的就是这个(使用Atlassian Sourcetree):
完成发布v1.0.2(意味着将release/v1.0.2
重新绑定到dev
并将release/v1.0.2
合并到master
分支,并创建一个v1.0.2标记)如果你我想知道为什么我使用rebase进入dev是因为我听说最好使用rebase。
完成要素功能1(将feature/feature1
变为dev
)
完成要素功能2(将feature/feature2
变为dev
)
从release/v.1.0.3
创建新版本(dev
)。
的结果 的
在release/v.1.0.3
中,有大量文件丢失,并且存在一些应该从feature/feature2
中删除的代码。我真的不明白出了什么问题。
恢复我所做的最简单的方法是什么,再给它一次。但是这次希望从一开始就正确地完成它(考虑到我第一次没做的事情,我怎么做呢)...
修改
似乎当我尝试完成feature2
时,它没有将其合并到dev
。罪魁祸首是,当我试图完成feature2
发布时,它有一些必须手动解决的冲突?至少在feature2
完成后我可以从这个日志中读出:
ab3473c HEAD @ {5}:checkout:从feature / feature2转移到develop 2f83ac7 HEAD @ {6}:rebase完成:返回refs / heads / feature / feature2 2f83ac7 HEAD @ {7}:rebase:更新默认图像
如果在feature1
完成后查看日志,它似乎已将其正确合并到dev
中:
05bf843 HEAD @ {53}:checkout:从开发转移到feature / feature2 ab3473c HEAD @ {54}:合并功能/功能1:快进 bf8bdda HEAD @ {55}:checkout:从feature / feature1移动到开发
答案 0 :(得分:0)
您正在使用rebase
而不是合并。 Rebase重写历史,这不是你想要的。 Rebase特别是 bad ,你已经推出了分支。希望你没有把这个烂摊子推到BitBucket,但你已经把所有东西都推到了BitBucket 之前创造了这个烂摊子。在那种情况下:
git fetch # assuming remote origin points to BitBucket
git checkout feature/feature1
git reset --hard origin/feature/feature1
git checkout feature/feature2
git reset --hard origin/feature/feature2
git checkout release/v1.0.2
git reset --hard origin/release/v1.0.2
现在恢复了混乱状态。 在master上创建v1.0.2发行版。
git checkout master
git merge release/v1.0.2
git tag v1.0.2
git push origin master
git push --tags origin
将新功能分支和v1.0.2修复程序合并到dev,并从dev启动新的v1.0.3 RC分支:
git checkout dev
git merge feature/feature1
git merge feature/feature2
git merge release/v1.0.2
git checkout -b release/v1.0.3