【问题标题】:Git Workflow Issue - Squashed Commits and ConflictsGit 工作流问题 - 压缩提交和冲突
【发布时间】:2012-02-26 19:33:59
【问题描述】:

我们目前正在使用 git,我试图提出一个合理的工作流程供人们使用,但目前有一个问题我不确定如何解决。如果在合并回主分支时发生冲突,我们会丢失压缩提交消息中的历史记录,这是我们想要保留的内容。目前的工作流程如下:

  1. git pull - 这应该在 master 分支上完成。
  2. git checkout -b TASK-ID - 为任务创建一个新分支。 TASK-ID 类似于 TASK-101
  3. 处理任务并根据需要提交更改。
  4. 完成任务后,git checkout master
  5. git pull - 获取自上次拉取以来所做的任何更改。
  6. 解决所有冲突并确保主版本中的当前版本编译。
  7. git merge --squash TASK-ID - 合并时将分支中的所有提交视为一个提交。
  8. git commit - 向提交消息添加任何附加信息,特别是 TASK-ID。需要注意的是,来自分支的所有提交消息都包含在内,因此在合并发生时它们不会丢失。
  9. git push - 将更改推送回服务器。

一些背景知识:目前我们在这方面工作的人并不多,我们不会经常看到冲突。压缩提交的原因是我们对每个任务都有一个提交。这样,如果我们的 Bamboo 服务器发现构建存在问题,我们可以轻松地将其绑定到任务并让开发人员修复它。此外,它使主历史记录更清晰,因为至少我倾向于进行大量提交。是的,我知道如果我们开始与更大的团队打交道,这可能需要改变,但那是在未来。

现在,我确实意识到,在这种情况下,我们可以在合并后简单地进行拉取,但这并不能完全解决问题,因为我们的开发人员可能不得不临时切换分支来修复发布或处理更高的优先级。我希望看到的是我们如何在不丢失压缩合并中的提交历史的情况下实现我现在得到的结果。我已经研究了几种使用 rebase 的解决方案,但没有一个是我想要的。

所以,总结一下,我的要求是:

  1. 在 master 中清除历史记录
  2. 可以在单次提交的消息中看到分支的变化
  3. 在提交更改之前,需要编辑压缩提交的提交消息以在其中包含任务 ID。 (修改也可以)。

【问题讨论】:

    标签: git merge


    【解决方案1】:

    你必须明白merge --squash有一些缺点:

    • 其中一个原因是它可能不会删除已删除的文件 - 有关详细说明,请参阅 here
    • 可能还有其他陷阱 - 包括 can't be avoided 的永恒冲突解决方案

    做你想做的事的正确方法显然是this answer 中详述的方法。我说显然是因为我还没有测试它 - 很快就会做,因为我想要myself的这个答案。
    要获得来自 TASK-101 分支的提交消息,请尝试here的建议

    编辑:对于您的原始问题,answer is .git/SQUASH_MSG

    【讨论】:

      【解决方案2】:

      也许我误解了,但我通常做的是让我的主人总是平等或落后于主人。这样,当我做一个 git pull 时,它永远不会有任何合并要做(因为主人的历史永远不会在我的团队中被覆盖)。 在我做了一个 git pull 之后,我去分支 TASK-101 并将 master 的结果合并到这个分支中。因此,task-101 将包含我的提交、master 中的提交以及可能的合并提交。每次我觉得需要更新我的工作存储库时,我都可以这样做。

      当我准备好提交时,我最后一次做这个,然后我去master和squash合并来自task-101的提交,然后做一个dcommit,以避免因为时间窗口而发生冲突的可能性最后一次拉取和推送之间的时间非常小。(在我的团队中从未发生过一次。如果发生了。如果发生了,我可能不得不通知团队并重写历史)。

      【讨论】:

      • 啊哈!谢谢!我实际上对此表示怀疑,因为它与我之前尝试过的类似,但是我的“修复”涉及将壁球合并到分支而不是常规合并,这是很大的不同。通过常规合并,看起来 git 实际上会跟踪从 master 到 branch 的更改。使用壁球合并,分支之间没有连接。
      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 2013-01-08
      • 2021-04-30
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多