我正在release/1.0
分支机构工作,我开始研究一些变化。不经意间,我将这些更改提交到我所在的同一个分支,即release/1.0
现在这个分支在本地有一些不在远程release/1.0
分支上的更改。
原来我们的repo系统不允许直接推送更改分支,但我们应该创建pull请求。
所以现在我有bugfix/my-branch
(分支远程release/1.0
),我希望发布/ 1.0上的本地更改。
我怎样才能"移动"对这个新分支的更改并在release/1.0
答案 0 :(得分:1)
此处的一个选项是git cherry-pick
您在release/1.0
上向bugfix/my-branch
分支提交的提交,然后删除前发布分支上的提交:
git checkout bugfix/my-branch
git cherry-pick A^..B # replace 'A' with earliest commit, 'B' with latest commit
...
git checkout release/1.0
git reset --hard HEAD~N # replace N with the number of commits you made on release
该解决方案假设您已将不推送了包含您最近提交的release/1.0
分支到公共远程,因此没有其他人见过它们。在这种情况下,可以通过在创建它们之前重置为删除这些提交是安全的。
关于cherry-pick范围语法的语法注释:
命令git cherry-pick A..B
仅在提交A
旧而不是提交B
时才有效。此外,提交A
本身将从范围排除,而B
将被包含在内。因此,要获得从A
到B
的提交范围,并且包含两端,请使用git cherry-pick A^..B
。
答案 1 :(得分:1)
您可能想尝试git rebase。
可选前置步骤:
如果您不确定(或不知道)您的错误修正应该基于哪个分支执行以下操作(因为您提到您已经有bugfix/my-branch
分支。
$ git branch -m bugfix/my-branch starting-point
首先将您的分支命名为实际名称:
$ git branch -m bugfix/my-branch
然后将其重新定位到正确的位置(假设为starting-point
)
$ git rebase --onto starting-point release/1.0 bugfix/my-branch
这会将release/1.0
和bugfix/my-branch
(你所做的所有提交)之间的所有内容移到brach上,你应该分支。
一切顺利后,您可以安全地删除starting-point
分支。
$ git branch -d starting-point
答案 2 :(得分:0)
尝试类似
的内容git checkout bugfix/my-branch
git cherry-pick release/1.0
git checkout release/1.0
git reset --hard origin/release/1.0
(提供您的遥控器名为origin
)