我目前正处于经历十几次提交的漫长热身之中.我已经在我的开发过程中构建了一些内容,以便只有HEAD我希望保留的更改- 所有其他冲突(例如提交哈希b06a1dd)应该被删除.
有没有办法简单地删除所有与之相关>>>>>>> b06a1dd的更改并保留Git将<<<<<<< HEAD一举标记的更改,因此我不必继续键入git rebase --continue,处理更多提交哈希中的更多冲突,并且只保留HEAD更改?
Sco*_*don 25
如果你愿意在(git rebase --abort)上启动rebase ,那么这应该做你需要的:
git rebase -X ours upstream
Run Code Online (Sandbox Code Playgroud)
upstream您正在重新定位的分支在哪里.
正如在这个答案和其他地方所指出的那样,对于变基而言,ours与theirs标签相比,对于合并而言更加困惑.在启动rebase之后,Git创建一个匿名分支并开始对其进行提交.因为ours意味着"保持对当前分支的更改",所以当前分支将HEAD包含upstream已经应用的任何更改rebase.
为了完整起见,这是我从之前的回答和当前问答中的评论中学到的东西(归功于他们的作者):
git rebase --abort,然后git rebase -X ours upstream可以做的伎俩。但我想在实践中你不会想盲目地使用ours或theirs不查看每个提交。当“处于冗长的变基过程中”时,您可能希望为每个提交做出逐案决定。因此,您的实际选择将是:
要使用上游:
git checkout --ours path/to/a/specific/file
git add path/to/a/specific/file
Run Code Online (Sandbox Code Playgroud)
甚至更好,在这种情况下,您只需使用以下命令:
git reset HEAD path/to/a/specific/file
Run Code Online (Sandbox Code Playgroud)使用您的功能分支:
git checkout --theirs path/to/a/specific/file
Run Code Online (Sandbox Code Playgroud)或者以手动方式<<<< ... ==== ... >>>>在编辑器中解决每个问题。
请注意,在 git rebase 和 git pull --rebase 期间,我们的和他们的可能会出现交换;--ours 给出了更改重新定位到的分支的版本,而 --theirs 给出了保存正在重新定位的工作的分支的版本。
这是因为 rebase 用于将远程历史作为共享规范的工作流,并将您在 rebase 的分支上完成的工作视为要集成的第三方工作,而您暂时承担了该角色在 rebase 期间规范历史的守护者。作为规范历史的守护者,您需要将远程的历史视为我们的(即“我们共享的规范历史”),而您在侧分支上所做的则是他们的(即“一个贡献者在其之上的工作”) )。