如何在git rebase中只保留头部更改 我目前正处于一个漫长的重任中,经历了十几次的妥协。我在我的开发过程中构建了一些东西,这样我只想保留HEAD中的更改-所有其他冲突(例如提交哈希b06a1dd)都应该删除
是否有一种方法可以简单地删除与如何在git rebase中只保留头部更改 我目前正处于一个漫长的重任中,经历了十几次的妥协。我在我的开发过程中构建了一些东西,这样我只想保留HEAD中的更改-所有其他冲突(例如提交哈希b06a1dd)都应该删除,git,git-rebase,Git,Git Rebase,是否有一种方法可以简单地删除与>>>>b06a1dd相关的所有更改,并保留Git将标记的更改,如果您愿意重新启动重新基础(Git重新基础--abort),那么这应该可以满足您的需要: git rebase -X ours upstream 其中,上游是您要重定基址的分支 如中和其他地方所述,我们的与他们的标签在重定基址时比合并时更容易混淆。启动rebase后,Git创建一个匿名分支并开始对其应用提交。由于ours的意思是“保留当前分支的更改”,因此当前分支将是HEAD,其中包含上游,以及reb
>>>>b06a1dd
相关的所有更改,并保留Git将标记的更改,如果您愿意重新启动重新基础(Git重新基础--abort
),那么这应该可以满足您的需要:
git rebase -X ours upstream
其中,上游
是您要重定基址的分支
如中和其他地方所述,我们的
与他们的
标签在重定基址时比合并时更容易混淆。启动rebase后,Git创建一个匿名分支并开始对其应用提交。由于ours
的意思是“保留当前分支的更改”,因此当前分支将是HEAD
,其中包含上游
,以及rebase
为完整起见已经应用的任何更改,这是我从当前问答中先前的回答和评论中学到的(归功于他们的作者):
- 如果您愿意重新开始并为所有提交选择相同的一方,那么当前选择的答案
git-rebase--abort
,然后git-rebase--X上游
就可以完成这项任务
- 但我想在实践中,您不会希望在不查看每个提交的情况下盲目地使用
我们的
或他们的
。当“在一个漫长的重基过程中”时,您可能希望对每个提交作出逐案决定。因此,您的实际选择将是:
- 要使用上游:
git checkout --ours path/to/a/specific/file
git add path/to/a/specific/file
或者更好,在这种情况下,您只需使用:
git reset HEAD path/to/a/specific/file
- 使用您的功能分支:
git checkout --theirs path/to/a/specific/file
- 或者以手动方式处理编辑器中的每个
PS::
注意,在git-rebase和git-pull-rebase期间,我们的和他们的可能出现交换--我们的版本来自分支,更改将被重定基址,而他们的版本来自分支,保存您正在重定基址的工作
这是因为在工作流中使用了rebase,该工作流将远程的历史记录视为共享的规范历史记录,并将在要重定基础的分支上完成的工作视为要集成的第三方工作,并且在重定基础期间,您暂时担任规范历史记录的保管者的角色。作为经典历史的守护者,你需要从远处将历史视为我们的(即“我们共享的经典历史”),而你在你的分支上所做的则是他们的(即“一个贡献者在其上的工作”)
有一个类似的问题,在我的例子中,我重定的分支是一个新分支(我刚刚创建了它,因此是空的),所以我只需要一个好的旧拉:
git rebase --abort && git pull origin my/remote_branch
换句话说,我是否可以保持头部的更改,而不必在我的文本编辑器中打开包含冲突的文件?这正是我想要的。非常感谢。当已经有了一个重新基址时,有没有办法在特定冲突中选择我们的
或他们的
更改?@AlexandroSánchez你可以使用git checkout——我们的,只要记住我们的和他们的在重新基址期间交换,请看我被迫选择:以前的选择现在是空的,可能是因为冲突解决。如果您仍然希望提交它,请使用:git commit--allow empty,否则,请使用正在进行的“git cherry pick--skip”交互式重新基址;在c0f562d上最后一个命令完成(13个命令完成):选择f3db26ce36 Bluh选择bb461e5aaa Bloh下一个要执行的命令(35个剩余命令):选择fd1c6d5087 Blih选择6db57302e4 Bleh您当前正在重新设置“c0f562d755”上的分支“my_branch”的基础无需提交,工作树清理无法应用bb461e5aaa。。。Blah@JosePaez当前位置我不确定这里的上下文是什么或者你的问题是什么。虽然它看起来和这个问题不一样,但是如果你仍然有这个问题,请链接到这个问题,如果它是相关的。如果你问了一个新问题,请随意在这里发布链接,我会看到的。它失败得很惨,我对每个文件都使用了“git reset HEAD path/to/a/specific/file”,完成后启动服务器并获得了“解析Gemfile
:语法错误,意外@JosePaez听到这个消息很抱歉。”。除非你有心情重做它,复制它,并找出原因,否则很难在这里给出具体的评论。它可能是一个意外的git add path/to/that/Gemfile
,或者其他类似的东西。