将本地分支更改为其他分支

时间:2016-10-05 09:33:48

标签: git

我正在release/1.0分支机构工作,我开始研究一些变化。不经意间,我将这些更改提交到我所在的同一个分支,即release/1.0

现在这个分支在本地有一些不在远程release/1.0分支上的更改。

原来我们的repo系统不允许直接推送更改分支,但我们应该创建pull请求。

所以现在我有bugfix/my-branch(分支远程release/1.0),我希望发布/ 1.0上的本地更改。

我怎样才能"移动"对这个新分支的更改并在release/1.0

本地丢弃它们

3 个答案:

答案 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将被包含在内。因此,要获得从AB的提交范围,并且包含两端,请使用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.0bugfix/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