git-如何处理分支机构;测试“;

git-如何处理分支机构;测试“;,git,merge,Git,Merge,我们有一个存储库来保存BSP&GUI小部件。 然后,我们从master分支编写主应用程序,并进行单元测试。 我从master创建了一个分支来测试键盘小部件:tst键盘 在这个分支中,我合并了来自master的更新,但有时我需要导入键盘错误修复和新功能。 此外,我还添加了一些属于测试的代码(例如:添加输入和日志) 到目前为止,我将键盘源代码中所做的更改与测试代码中所做的更改分开,以便在主分支中使用cherry pick(仅键盘)应用提交,因为合并还将应用特定于测试的提交 B1

我们有一个存储库来保存BSP&GUI小部件。 然后,我们从master分支编写主应用程序,并进行单元测试。 我从master创建了一个分支来测试键盘小部件:tst键盘

在这个分支中,我合并了来自master的更新,但有时我需要导入键盘错误修复和新功能。 此外,我还添加了一些属于测试的代码(例如:添加输入和日志)

到目前为止,我将键盘源代码中所做的更改与测试代码中所做的更改分开,以便在主分支中使用cherry pick(仅键盘)应用提交,因为合并还将应用特定于测试的提交

           B1--B2--B3------   <-- branch test (HEAD)
          /        / <-- cherry-pick B3 because B1 and B2 are "test specific".
A1--A2--A3   <-- master  

B1--B2--B3------通常,您创建要素分支,并将它们合并到两个分支中。这样,您就没有问题了,您的生产系统中有一些您不想要的提交

Atlassian有一个很棒的工作流教程


有一部分用于特征分支,还有其他非常好的部分如何处理分支

虽然您的工作流程远未达到标准,我建议您重新考虑,但这并不是您真正要求的。因此:

当测试中的下一次合并不应用旧提交时,是否有一种方法可以“重新设置”主节点的基础

有很多方法可以达到这种效果(但实际上不是通过重新定基来实现)。例如,在上面的场景中,您有(在樱桃采摘之后):

屈服

A1 -- A2 -- A3 -- B3` ------- M0 <--(master)
              \              /
               B1 -- B2 -- B3 <--(test)
相反,你可以

git checkout test
git checkout -b keypad_changes
git revert B1 B2
git checkout master
git merge keyboard_changes
git branch -d keyboard_changes
给你

A1 -- A2 -- A3 --------------------------- M <--(master)
              \                           /
               \                !B2 -- !B1
                \              /
                 B1 -- B2 -- B3 <--(test)

A1--A2--A3------------------M所以你建议我创建一个键盘分支和一个键盘tst分支。然后,所有tst提交特定的数据都保留在其分支中。作为一个老cvs用户,我发现这样的分支可能会导致ininfite分支,并且需要有人专门负责维护:)。这是一个eclipse项目,它编译一个二进制文件,所以只有一个main()main在源代码中保持活动状态。我仍然在想我是否应该掌握测试源代码(并使用makefile设置创建概要文件编译)。谢谢你的链接。这很有趣,因为你真的回答了我的“如何”问题(你做得很快,很难!)。在我发现更安全的第二种情况下,我意识到这个过程相当于创建了一个专用于键盘的“虚拟功能临时分支”。
A1 -- A2 -- A3 <--(master)
              \
               B1 -- B2 -- B3 <--(test)
git checkout test
git checkout -b keypad_changes
git revert B1 B2
git checkout master
git merge keyboard_changes
git branch -d keyboard_changes
A1 -- A2 -- A3 --------------------------- M <--(master)
              \                           /
               \                !B2 -- !B1
                \              /
                 B1 -- B2 -- B3 <--(test)