0

场景:我们遵循 git 工作流程:

master分支 - 具有来自各个功能分支的可发布代码

to-be-QAd分支 - 具有尚未由 QA 测试的各个功能分支的代码

  1. 我从master创建了一个分支feature-A
  2. 提交了一些更改(提交 1
  3. 做了一些更改并提交(提交 2
  4. 将分支功能-A合并到to-be-QAd分支
  5. 意识到该功能在to-be-QAd分支中无法按预期工作
  6. 切换到feature-A分支并将 --hard 重置为上一次提交(commit 1),因为最后一次提交使代码变得更糟
  7. 进行更改并提交(提交 3
  8. 将 feature-A分支合并到to-be-QAd
  9. 具有正确代码的文件(这是commit-1的一部分)被错误地合并。合并保留来自提交 2的文件。(该文件在上次提交时未修改。)

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

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

4

3 回答 3

1

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

这是来自git help revert

给定一个或多个现有提交,还原相关补丁引入的更改,并记录一些记录它们的新提交。这要求您的工作树是干净的(不修改 HEAD 提交)。

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

相关:Git Revert、Checkout 和 Reset 有什么区别?以及如何将 Git 存储库恢复到以前的提交?.

于 2012-04-13T01:33:11.133 回答
0

to-be-QAd分支仍然有来自 commit2的更改和其他一些不正确的文件,因为您从第一次引入feature-A时就没有撤消合并。

在进行修复后第二次合并feature-A之前,我会在to-be-QAd分支上运行 git reset --hard 在第一次合并之前提交的 id

编辑!

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

于 2012-04-13T01:37:57.427 回答
0

当您在功能 A 分支上执行“git reset”时,您返回到 commit-1,然后添加了 commit-3。但是在 to-be-QAd 分支上,您仍然有 commit-1 和 commit-2。然后,当您将 feature-A 合并到 to-be-QAd 时,您会得到以下内容:commit-1、comment-2 和 commit-3-merged。因此,commit-2 中的某些东西可能仍然存在。您可以通过以下几种方式解决问题:

  1. 在 feature-A 和 to-be-QAd 上执行“git reset”,将 commit-3 添加到 feature-A,合并到 to-be-QAd
  2. 对功能 A 执行“git revert”以添加取消提交 2 的提交,添加提交 3 - 在此之后,您的功能 A 分支将如下所示:commit-1、commit-2、commit-2-撤消,提交-3。然后,合并到将得到 commit-2-undo 和 commit-3 的 to-be-QAd
于 2012-04-13T05:20:51.157 回答