Git 意外地从主题分支而不是主分支分支

Git 意外地从主题分支而不是主分支分支,git,Git,我正在研究多个主题分支。一个主题分支有很多新特性,比master提前17次提交 现在,我决定研究另一个主题,并转移到一个新的主题。我做了一次提交,这一次提交就可以在GitHub上请求拉取了。然而,我注意到,我不小心将上一个主题分支分支而不是主分支,所以GitHub正在使用另一个主题分支的其他17个提交来预览我。如何将此新提交移动到没有上一个主题分支提交的主题分支?问题是,这并不是说这将是直接的,因为您可能已经更改了上一个文件已经更改的文件。如果更改因此而相互依赖,则必须解决冲突 但是,您可以执行

我正在研究多个主题分支。一个主题分支有很多新特性,比master提前17次提交


现在,我决定研究另一个主题,并转移到一个新的主题。我做了一次提交,这一次提交就可以在GitHub上请求拉取了。然而,我注意到,我不小心将上一个主题分支分支而不是主分支,所以GitHub正在使用另一个主题分支的其他17个提交来预览我。如何将此新提交移动到没有上一个主题分支提交的主题分支?

问题是,这并不是说这将是直接的,因为您可能已经更改了上一个文件已经更改的文件。如果更改因此而相互依赖,则必须解决冲突

但是,您可以执行以下操作:

  • 转到主机
    git签出主机
  • 创建一个主题分支(不是“意外”主题分支的另一个名称):
    git checkout-b new\u topic\u branch
  • 检查您的git树并查看提交散列(第一个和最后一个“意外”分支)
  • cherry pick这些提交使用
    git cherry pick A..B
    使用
    A
    第一次提交“意外”分支的散列,以及
    B
    该分支的最后一次提交)。在这种特殊情况下,您似乎只进行了一次提交,因此您可以使用该次提交的哈希值
    commit
  • 如果成功,那么最后的更改也会在新分支上处理

  • 或者,您可以将该分支合并到主分支。

    从概念上讲,处理这种情况最简单、最干净的方法可能是从最新的
    主分支创建一个新的主题分支,然后选择您的单个提交:

    首先在旧主题分支上查找最新提交的SHA-1哈希:

    git checkout old_topic
    git log
    
    第一个条目是您打算在其自己的分支中进行的最新提交。记录此提交的SHA-1哈希(前8个字符应为 够了)

    现在从
    master
    创建一个新的主题分支,并选择所需的提交:

    git checkout master
    git pull origin master
    git checkout -b new_topic
    
    现在,cherry选择提交

    git cherry-pick SHA-1
    

    只需将新分支重新设置到master上:

    git checkout new-topic
    git rebase --onto master old-topic
    

    对不起,是的,更改是完全独立的。