迁移多个提交的git rebase?

8
我想更深入地了解git rebase
假设我有这个工作流,git rebase是否有用呢? 如果有的话,从MASTERBRANCH迁移提交X到Z的命令将是什么(假设不使用cherry-pick)。

enter image description here


在这种情况下,合并不会达到相同的结果吗? - nwinkler
@nwinkler 从代码功能的角度来看,他是合并还是变基无所谓。但从Git工作流的角度来看,他可能更偏好其中一种方法。 - Tim Biegeleisen
2个回答

3

信不信由你,你实际上正在将 master 分支基于 branch 进行变基!

以下是可用于实现此目的的命令:

git checkout master                  # checkout the master branch
git checkout -b newbranch            # create new branch based on master
git rebase branch                    # rebase on 'branch'

请记住,我创建了一个名为newbranch的新分支,它将以你想要的方式显示。关于原始的branch,你可以自行决定要做什么。现在newbranch将如下所示:

A--B--C--D--X--Y--Z

一个更典型的工作流程是通过将branch基于master进行变基,即将新更改从master带入branch中:

git checkout branch
git rebase master

这将使branch看起来像这样:
A--X--Y--Z--B--C--D

谢谢Tim。假设branch是threads1,newbranch是threads2。 我使用了你的命令,但出现了以下错误 - 有什么建议吗?-抱歉,我还不知道如何正确地在注释中换行。$ git checkout master 已经在'master'分支上 $ git checkout -b threads2 切换到新分支'threads2' $ git rebase origin threads 致命错误:需要一个单一的修订版本 无效的上游来源 - artm
抱歉,线程是threads1(原始分支)>$ git rebase origin threads1 致命错误:需要一个修订版本 无效的上游源origin - artm
1
谢谢Tim。我会尽快确认你的答案。 - artm
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - artm
嗨,Tim,我标记了它 - 谢谢。唯一值得一提的是,最后一个命令 git rebase origin branch 需要更改为 git rebase origin/branch 才能对我起作用。我不确定为什么,请在您认为正确的情况下更新它。 - artm
你说得对...我删除了origin的引用。实际上,你需要指定一个分支的名称。所以,git rebase branch 是可以的, git rebase origin/branch 也是可以的。前者使用本地分支,而后者使用远程分支。git rebase origin branch 是没有意义的。 - Tim Biegeleisen

2

如果你在检出分支的情况下执行 git rebase master 命令,那么就会将该分支的提交记录重新应用到 master 分支之上:

A--x--y--z--b'--c'--d' (Branch)
         |
       (master)

这有助于确保您的分支的本地提交与最新的master演变仍然兼容。

请确保您尚未推送您的分支,因为它会更改其历史记录。

参见"git工作流和rebase vs merge问题"。


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