git - 将任何 Git 提交从一个分支移动到另一个分支

标签 git

我有以下 Git 提交树:

R - A - B - C - D (master)

我愿意:

R - A - B - D' (master)
        \ - C  (new-branch)

我该怎么做(假设它甚至可能)?

我开始使用 git cherry-pick 但我没能从 master 分支中删除提交。

谢谢。

最佳答案

你不能得到你想要的,因为提交会有所不同,但如果你这样做,文件的内容将是你想要的:

$ git checkout master
$ git reset --hard sha1-of-B  # set master back to B
$ git cherry-pick sha1-of-D   # set master to R-A-B-D'
$ git checkout -b new-branch sha1-of-B   # set new-branch to B
$ git cherry-pick sha1-of-C   # set new-branch to R-A-B-C'

请注意,您实际上并不需要挑选来设置新分支,您可以轻松地做到这一点:

$ git reset sha1-of-C

当您 checkout 新分支时。这实际上会给你 R-A-B-C 而不是 R-A-B-C'。请注意,C 和 C' 之间的唯一区别是提交时间。

一旦你进行了重置,你可能很难找到各种提交的 sha1 散列(它们可以从 reflog 中获得),所以你可能想在开始之前给所有东西加上标签,或者将历史存储在某个地方.

关于git - 将任何 Git 提交从一个分支移动到另一个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992048/

相关文章:

Android - 前缀 "xmlns"不能显式绑定(bind)到任何命名空间; "xmlns"的命名空间也不能显式绑定(bind)到任何前缀

node.js - 如何保留对 NPM 模块所做的本地更改?

django - 遵循 Subversion 存储库 Trunk : Git (Mirror), Git-Svn、Subversion 的最佳实践?

git - 从 GitHub 存储库下载单个文件夹或目录

git - 我如何找出哪个 Git 提交导致冲突?

git - 如何以最简单的方式解决 .DS_Store 的 merge pull 请求冲突?

git - 在迁移到 git (git-svn) 时排除已删除的 svn 分支/标签

node.js - 具有多个 docker 文件的 Git repo 结构

git - 有没有办法使用git查看文件的所有版本?

git子模块更新和认证