如何创建一个新的git分支但从一个PR中排除更改

olhwl3o2  于 2023-05-21  发布在  Git
关注(0)|答案(2)|浏览(149)

在我的项目中,有两个分支,分别名为release-5.0integration-5.0。我们的工作流程是将我们的功能分支合并到integration中,并进行内部QA,完成后,我们为release提交PR,客户端有自己的审查/QA。其中一个PR没有被批准,我们决定推迟这些变更。我现在需要创建一个与integration-5.0相同的新分支,但要使用一个新名称,并仅排除来自该PR的更改(在我想要排除的PR之前和之后合并了PR。最简单的方法是什么?

s8vozzvw

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

只有当特性分支FHIJ不是基于包含坏特性分支G的工作时,这才有效。

2w3rbyxf

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 rebase -i commit-hash^

将commit-hash替换为前面提到的commit hash。(^符号是命令的一部分,请将其保留在那里。)
一个交互式的变基文件将打开,显示一个提交列表。找到与您要排除的提交相对应的行并删除它们,或者将命令从拾取更改为删除。
保存并关闭文件以继续变基过程。
Git会自动应用更改,不包括您删除的提交。如果存在任何冲突,请手动解决它们。
一旦变基完成,你的新分支new-branch-name将拥有integration-5.0中的所有更改,除了排除的拉取请求中的更改。
现在你可以将你的新分支推送到远程仓库了:

git push origin integration-5.0-2

您的新分支已准备就绪,并且已排除了所需的更改。

相关问题