1

所以这是交易,我在我的应用程序中使用 git 和 Bitbucket。我正在为 git 使用 git-flow 系统。所以背景是这样的。我有一个发布分支release/v1.0.2,它已经开放了一段时间(我的用户目前正在测试 1.0.2)。同时 beta-testing 1.0.2 我已经开始实现两个新特性,我们就叫它们feature/feature1feature/feature2.

今天我决定完成 feature1 和 feature2,并且 v1.0.2 的 beta 测试也完成了。所以我所做的是(使用 Atlassian Sourcetree):

  1. 完成版本 v1.0.2(意味着变基release/v1.0.2dev合并release/v1.0.2master分支,并创建一个 v1.0.2 标记)如果您想知道为什么我使用变基到开发是因为我听说最好使用变基。

  2. 完成功能 feature1(变基feature/feature1dev

  3. 完成功能 feature2(变基feature/feature2dev

  4. 从 .创建一个新版本 ( release/v.1.0.3) dev

结果

其中release/v.1.0.3有很多文件丢失,并且存在一些应该从feature/feature2. 我真的不明白出了什么问题。

什么是最简单的方法来恢复我所做的并再试一次。但是这次希望从一开始就正确完成它(考虑到我第一次做的事情没有成功,我该怎么做)......

编辑

似乎当我尝试完成时feature2它并没有将它合并到dev. 罪魁祸首可能是当我试图完成feature2发布时它有一些必须手动解决的冲突吗?至少在完成以下操作后我可以从该日志中读出feature2

ab3473c HEAD@{5}:结帐:从 feature/feature2 移动到开发 2f83ac7 HEAD@{6}:rebase 完成:返回 refs/heads/feature/feature2 2f83ac7 HEAD@{7}:rebase:更新默认图像

如果在完成后查看日志,feature1它似乎已正确合并为dev

05bf843 HEAD@{53}:结帐:从开发到功能/功能 2 ab3473c HEAD@{54}:合并功能/功能 1:快进 bf8bdda HEAD@{55}:结帐:从功能/功能 1 到开发

4

1 回答 1

0

您正在使用rebase而不是合并。Rebase 改写历史,这不是你想要的。对于您已经推送的分支,Rebase 尤其糟糕。希望您没有将这个烂摊子推到 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
于 2013-09-16T14:04:33.643 回答