在我的项目中,有两个分支,分别名为release-5.0和integration-5.0。我们的工作流程是将我们的功能分支合并到integration中,并进行内部QA,完成后,我们为release提交PR,客户端有自己的审查/QA。其中一个PR没有被批准,我们决定推迟这些变更。我现在需要创建一个与integration-5.0相同的新分支,但要使用一个新名称,并仅排除来自该PR的更改(在我想要排除的PR之前和之后合并了PR。最简单的方法是什么?
release-5.0
integration-5.0
integration
release
s8vozzvw1#
你有这种情况
--o--o--o--o--o <-- integration-5.0 / / / / / F G H I J <-- the feature branches ^ | the bad one
您只需在合并坏特性分支之前分支,然后合并所有好特性分支:
G <-- the bad one \ --o--o--o--o--o <-- integration-5.0 /| / / / F | H I J <-- the good feature branches \ \ \ \ `---o--o--o <-- integration-fixed
只有当特性分支F、H、I、J不是基于包含坏特性分支G的工作时,这才有效。
F
H
I
J
G
2w3rbyxf2#
使用rebase解决了这个问题,我实际上忘记了有两个PR需要排除,一个有相同功能的QA修订版。下面是它是如何完成的:通过拉取integration-5.0分支来确保您有最新的更改:
git checkout integration-5.0 git pull origin integration-5.0
基于integration-5.0创建新分支:
git checkout -b integration-5.0-2
运行git log并记下特性分支中最早提交的提交哈希。从该提交开始启动交互式变基:
git log
git rebase -i commit-hash^
将commit-hash替换为前面提到的commit hash。(^符号是命令的一部分,请将其保留在那里。)一个交互式的变基文件将打开,显示一个提交列表。找到与您要排除的提交相对应的行并删除它们,或者将命令从拾取更改为删除。保存并关闭文件以继续变基过程。Git会自动应用更改,不包括您删除的提交。如果存在任何冲突,请手动解决它们。一旦变基完成,你的新分支new-branch-name将拥有integration-5.0中的所有更改,除了排除的拉取请求中的更改。现在你可以将你的新分支推送到远程仓库了:
git push origin integration-5.0-2
您的新分支已准备就绪,并且已排除了所需的更改。
2条答案
按热度按时间s8vozzvw1#
你有这种情况
您只需在合并坏特性分支之前分支,然后合并所有好特性分支:
只有当特性分支
F
、H
、I
、J
不是基于包含坏特性分支G
的工作时,这才有效。2w3rbyxf2#
使用rebase解决了这个问题,我实际上忘记了有两个PR需要排除,一个有相同功能的QA修订版。下面是它是如何完成的:
通过拉取integration-5.0分支来确保您有最新的更改:
基于integration-5.0创建新分支:
运行
git log
并记下特性分支中最早提交的提交哈希。从该提交开始启动交互式变基:
将commit-hash替换为前面提到的commit hash。(^符号是命令的一部分,请将其保留在那里。)
一个交互式的变基文件将打开,显示一个提交列表。找到与您要排除的提交相对应的行并删除它们,或者将命令从拾取更改为删除。
保存并关闭文件以继续变基过程。
Git会自动应用更改,不包括您删除的提交。如果存在任何冲突,请手动解决它们。
一旦变基完成,你的新分支new-branch-name将拥有integration-5.0中的所有更改,除了排除的拉取请求中的更改。
现在你可以将你的新分支推送到远程仓库了:
您的新分支已准备就绪,并且已排除了所需的更改。