2012-04-13 67 views
0

场景: 我们下面的git的工作流程:为什么重新合并分支会忽略一些更改?

分支 - 具有独立功能分支

释放码待QAD分支 - 从个体特征的分支代码,但通过QA

  1. 被测试我创建了一个分支特征-A
  2. 致力于制造一些更改(提交1
  3. 制造几个更多的变化和提交(提交2
  4. 合并分支特征-A待QAD分支
  5. 意识到待办事项功能未能正常工作QAd分行
  6. 切换至功能-A分支进行了复位 - 硬先前提交(提交1)作为最后一个提交作出了代码更糟
  7. 做出改变,并承诺(提交3
  8. 合并功能-A支进QAd
  9. 具有正确代码的文件(属于commit-1)被错误地合并。合并保留提交2的文件。 (该文件未在上次提交中修改)

不确定这里做错了什么!根据我对git的有限了解,这似乎是非常微不足道的事情。

如果我正在做一些根本性的错误,那么在这种情况下,您已经合并过一次的正确方法是什么,需要返回功能分支中的先前版本并再次合并。

回答

1

git reset --hard只是重置HEAD指针。你可能想要做git revert <commit-id>。这有效地解除了提交并将其记录在历史记录中,以便将撤消操作合并到您的QA分支中。

这是git help revert

由于一个或多个现有的提交,恢复变更,相关的补丁引入,并记录了一些新提交该记录下来。这 要求您的工作树是干净的(没有修改HEAD提交)。

注意:git revert用于记录一些新的提交以反转一些早期提交(通常只是错误提交)的效果。如果你想把 丢掉工作目录中的所有未提交的更改,你应该看到git-reset(1),特别是--hard选项。 ...

相关:What's the difference between Git Revert, Checkout and Reset?How to revert Git repository to a previous commit?

0

以待QAD分支仍具有commit2和其他一些不正确的文件的变化,因为你没有撤消从第一次合并,当你带过来功能-A

之前使修复后合并了功能-A第二次,我会运行git的复位 - 硬上以待QAD分支哪里的第一个合并之前提交的ID

编辑!

这可能会导致问题,如果其他开发人员在初始合并后提交了QAd功能。如果这样做,请注意您将会退出哪些提交。

+1

如果其他人已经提交给即将QAd分支会怎么样? – krlmlr 2012-04-13 01:39:09

+0

我同意,我忽略了这个事实。 Upvoted您的文章,我认为这是更合适的解决方案,特别是与其他开发人员合作时。 – Keith 2012-04-13 01:43:38

0

当您在feature-A分支上执行'git reset'时,您又回到了commit-1,然后添加了commit-3。但是在QAd分支上,您仍然有commit-1和commit-2。然后,当您将功能A合并到即将QAd时,您可能会看到如下内容:commit-1,comment-2和commit-3-merged。因此,可能来自commit-2的东西依然存在。您可以通过以下几种方式解决问题:

  1. 对feature-A和待定QAd执行'git reset',将feature-3添加到feature-A,合并到to-be- QAd
  2. 在feature-A上执行'git revert'以添加一个提交un-commit commit-2,添加commit-3 - 在此功能之后 - 分支将如下所示:commit-1,commit-2, commit-2-undo,commit-3。然后,合并到即将到达的QAd,它将获得提交2撤消和提交3
相关问题