如何在git中将未推送的提交从一个(本地)分支移动到另一个分支?

3
我想把我本地的提交移动到另一个分支,但还未推送到远程。
按照我们的工作流程,我们需要从JIRA中创建一个分支。然后我在本地检出此分支,完成工作并提交(push)到该分支,然后向代码审查人员发起拉取请求,然后合并到相应的分支并向上合并到主分支。但由于这个新的工作流程我们才刚开始实行,所以我有点忘了。
我忘了为JIRA项目创建分支。相反,我在我的本地分支4.10BR上工作并提交了3次不同的提交(针对这3个单独的JIRA项)。我的git日志显示... 我现在会在Jira-BitBucket中单独为这3个项目创建分支(分别为b1、b2和b3),然后检出这些分支,并将我的提交“移动”到这些分支,最后推送这些分支。
由于我是Git中的初学者,我不知道如何继续操作,请给予帮助?
3个回答

5

这是一个常见的工作流错误,我在过去的十年中犯过数十次。通常我处理它的方法如下:

创建你应该在一开始就创建的新实际分支:

# from release/4.10
git branch feature/some_name

现在有一个分支 feature/some_name,其中包含您的单个工作提交。 唯一剩下的问题是 release/4.10 分支,它现在也包含一个不需要的提交。 鉴于您尚未推送发布分支,我们可以尝试对该分支进行硬重置以删除此提交:

# from release/4.0, again
git reset --hard HEAD~1

现在你拥有了自己的特性分支,发布分支的状态将与你一开始遵循正确的工作流程时相同。

1
您可以使用命令git checkout -b '分支名称'从当前分支创建一个新的分支。这将保留您的代码,包括未推送的3个提交记录。如果您已经创建了该分支,您可以使用git merge '其他分支'将当前分支与另一个分支合并。

-1
如果您想将更改移动到现有分支和/或在错误的分支中有许多提交,请尝试以下操作。在我的情况下,我提交到主分支时本应该提交到开发分支,因此它看起来像这样:
git checkout develop
git merge master
git checkout master
git reset --hard [HASH]

其中 [HASH] 是你不想要的修改之前的提交哈希值,你也可以使用 HEAD~n 代替 [HASH],n 为不想要的提交数量。

如果你的分支不存在,只需使用 git checkout -b 分支名 创建它,然后合并和重置即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接