如何只保留git rebase中的头部更改

时间:2016-09-08 22:49:35

标签: git git-rebase

我目前正处于经历十几次提交的长篇大论。我在开发过程中构建了一些内容,只有HEAD中的更改才是我要保留的内容 - 所有其他冲突(例如提交哈希b06a1dd)都应该删除。

有没有办法简单地删除与>>>>>>> b06a1dd相关的所有更改,并保持Git将一举标记<<<<<<< HEAD的更改,所以我不必继续键入{{1处理来自更多提交哈希的更多冲突,并且只保留git rebase --continue更改?

3 个答案:

答案 0 :(得分:19)

如果你愿意开始转换(git rebase --abort),那么这应该做你需要的:

git rebase -X ours upstream

其中upstream是您要重新定位的分支。

正如this answer和其他地方所述,ourstheirs标签对于变基比混合更容易混淆。在启动rebase之后,Git创建一个匿名分支并开始对其进行提交。由于ours表示&#34;保持对当前分支的更改&#34;,当前分支将为HEAD,其中包含upstream以及rebase已应用的所有更改

答案 1 :(得分:3)

为了完整起见,这是我从当前问答中的先前答案和评论中学到的东西(功劳归其作者):

  • 如果您愿意重新开始并为所有提交选择相同的一面,则当前选择的答案git rebase --abort然后git rebase -X ours upstream可以解决问题。
  • 但是我想在实践中您不希望盲目使用ourstheirs而不用检查每个提交。您可能想针对每次提交的具体情况做出决定,当它处于“冗长的改组过程中”时。因此,您的实际选择将是:

    1. 要使用上游:

      git checkout --ours path/to/a/specific/file
      git add path/to/a/specific/file
      

      甚至更好,在这种情况下,您只需使用以下代码即可:

      git reset HEAD path/to/a/specific/file
      
    2. 使用功能分支:

      git checkout --theirs path/to/a/specific/file
      
    3. ,或者以手动方式执行,以解决编辑器中的每个<<<< ... ==== ... >>>>

PS:The ours and theirs have special meaning when doing rebase.

答案 2 :(得分:0)

有一个类似的问题,在我的情况下,我要迁移到的分支是一个新分支(我刚刚创建了这个分支,因此是空的),所以我只需要一个很好的旧拉:

git rebase --abort && git pull origin my/remote_branch