Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:如何在合并分支后重新设置分支的基础,并保持合并提交';变化_Git_Rebase - Fatal编程技术网

git:如何在合并分支后重新设置分支的基础,并保持合并提交';变化

git:如何在合并分支后重新设置分支的基础,并保持合并提交';变化,git,rebase,Git,Rebase,我有过这样的经历: A - B - M \ / C A、 B和M是主,C在特征分支上 我犯了两个错误: 在我进行合并之前,我没有意识到远程公司不接受合并提交 除了简单地解决冲突之外,我在合并提交中更改了很多内容 我想重新设置基址,所以看起来像是A-B-C-M,C-M可能挤在一起了 我只发现,唯一的回答是“合并很好” 我承认我仍然不是100%熟悉rebase语法,但是我告诉git要重新设置基础的任何组合,无论有没有-p和/或-I,它要么说没有任何东西可以重新设置基础(noop)

我有过这样的经历:

A - B - M
 \    /
    C 
A、 B和M是主,C在特征分支上

我犯了两个错误:

  • 在我进行合并之前,我没有意识到远程公司不接受合并提交
  • 除了简单地解决冲突之外,我在合并提交中更改了很多内容
  • 我想重新设置基址,所以看起来像是A-B-C-M,C-M可能挤在一起了

    我只发现,唯一的回答是“合并很好”

    我承认我仍然不是100%熟悉rebase语法,但是我告诉git要重新设置基础的任何组合,无论有没有
    -p
    和/或
    -I
    ,它要么说没有任何东西可以重新设置基础(noop),要么说它不工作

    似乎合乎逻辑的选择是使用C和
    rebase-ip master
    ,但它并没有达到我预期的效果。

    考虑到这段历史:

    A - B - M
      \    /
        C 
    
    在M处,您将软重置为B,然后提交,然后您将得到
    A-B-M'
    ,这似乎是您想要的:

    git checkout M
    git reset B
    git commit
    

    分支的内容将保持不变,所有这些命令都不会改变,只有
    C
    从历史记录中删除,使其看起来像一个直分支。

    这将是
    git checkout
    git reset--soft B
    ,因为新的提交是从索引的内容进行的,并影响当前的分支(或分离的头部)。这就像一个符咒,但我不知道为什么。重置为什么要这样做?M不见了(我猜是这样),C在另一个分支上,但没有人关心他。因此,重置soft is基本上使分支头指向该提交,并将差异作为要提交的更改。很高兴知道这一点,尤其是它不关心分支或任何事情,只关心实际的更改?当您进行软重置时,工作目录的内容不会更改。这是至关重要的。但HEAD指向您指定的某个版本。在这一点上,查看git diff,您将看到HEAD和您的内容之间的差异。当您提交时,这些差异自然会成为新提交的内容。这很简单。是的,我认为可以说Git主要关心实际的变化。这很有道理。