Git - 如何在分支之间移动提交?

3

我有以下内容:

branch0  ---  commit1 --- commit2 --- branch2 --- commit3
   |
branch1
   |
commit4
   |
commit5

我想将其更改为以下内容(即将所有内容从 commit1 移动):
branch0
   |
branch1
   |
commit4
   |
commit5  ---  commit1 --- commit2 --- branch2 --- commit3

我尝试使用 rebasecherry-pick,但是我的知识不够丰富,所以欢迎任何建议。

谢谢。

更新:

从 mimikrija 的下面的答案中,我尝试了以下方法:

git checkout branch0
git checkout -b temp
git rebase branch1
## fix conflicts
git add .
git commit -am "rebase applied"
git rebase --continue
git branch -mv -f branch1

我收到以下错误消息:
致命错误:无效的分支名称:“HEAD”
git status
rebase in progress; onto 89844e6
You are currently rebasing branch 'temp' on '89844e6'.
  (all conflicts fixed: run "git rebase --continue")

这个做的事情类似,但只针对一个提交,https://dev59.com/_3A65IYBdhLWcg3wogOe - user2569831
2个回答

1
假设这些都是本地分支(尚未发布或已发布但没有被其他人使用),以下是需要采取的步骤。
git checkout branch2 git checkout -b temp 基于branch2创建临时分支
git rebase branch1 现在你拥有了自己所画的图表,但它被称为temp git branch -mv -f branch1 强制重命名分支
最后,删除branch2上的提交:
git checkout branch2 git reset --hard branch0

我有点困惑,关于你使用的branchAbranchB。我有branch0branch1branch2。它们如何对应?我有这三个分支,每个分支都有一些提交。 - user2569831
@user2569831,commit3 属于哪个分支?你的图表让我感到困惑。 - mimikrija
抱歉,如果不太清楚。我在问题中添加了一个更新,显示我遇到的错误。commit3 属于 branch2branch1branch2 是从 branch0 创建的。 - user2569831
@user2569831感谢您的更新。显然您还在进行重新基于 (状态输出),这意味着并未解决所有冲突。一旦您有一个干净的“状态”,您可以继续重命名分支。 - mimikrija
@user2569831,除非commit4commit5中包含了与commitcommit2相同的更改,否则它们应该在那里。在这种情况下,在重新设置基础时,commit1commit2将变得过时(它们不会引入任何更改),因此它们将消失。顺便说一句,为了更好地理解这一点,请阅读:https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase - mimikrija
显示剩余5条评论

0

你需要做的就是将分支1中的代码拉取到分支2中

步骤:

git checkout branch2
git pull origin branch1

为什么要从 origin 拉取代码? - mimikrija
@mimikrija 我假设 branch1 已经推送到远程,并且该远程是 origin - Shubham Khatri
@Shubham 谢谢回复。但我不明白这怎么能实现我需要的功能。 - user2569831
据我理解,您需要在branch2中获取branch1的更改以及commit4和commit5,只有当您在branch2中进行pull或将branch1合并至branch2时才能获取这些更改。 - Shubham Khatri

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