Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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 rebase中只保留头部更改 我目前正处于一个漫长的重任中,经历了十几次的妥协。我在我的开发过程中构建了一些东西,这样我只想保留HEAD中的更改-所有其他冲突(例如提交哈希b06a1dd)都应该删除_Git_Git Rebase - Fatal编程技术网

如何在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
,或者其他类似的东西。