已将几个提交推送到原始分支。这些提交包含导致问题的代码。为了解决问题,我在问题开始之前对提交做了git reset --hard <sha>
。
我已经修复了问题并在本地提交。现在我想推送到Origin,但我不能,因为我的分支是由5次提交(导致问题)和提前1次提交(修复提交)。即。分歧。
我不想合并来自Origin的任何更改。如何将Origin的头部设置为我的本地提交的头部,而不将合并提交到我的本地分支?
谢谢!
答案 0 :(得分:6)
干净的方式(保存历史)
git revert
糟糕的提交(你分叉的最后一个好的 sha 和远程HEAD之间的所有内容)...这会在保留所有历史记录时删除不需要的更改肮脏的方式(丢弃历史记录,将远程分支上的其他任何人解散)
git push -f
(仔细检查您是否拥有正确的选项&refspec)并希望其他任何人的远程分支历史记录不会在其下方发生变化答案 1 :(得分:2)
如果您不想丢弃其他人在这些错误提交中所做的事情,即保留历史记录,但只是为了拒绝那里发生的更改,您可以使用ours
合并策略:
git merge -s ours badbranch
这实际上创建了一个合并提交,它只接受当前分支的所有更改。它将完全忽略badbranch
上发生的事情,但仍会包含历史记录中的内容。所以你可以查看那里发生的变化,但它们不会影响你当前的版本。
否则,如果您只是想完全抛弃它们,并且如果您完全控制存储库并且不关心从存储库中提取的其他存储库,则可以覆盖该分支,实质上从存储库中删除这些提交(除非你有另一个分支指向它)。你通过强制推送来做到这一点:
git push origin master -f
请注意,这会为可能已经获取这些更改的存储库中的其他所有人创建冲突,因此请不要这样做,除非您确实知道它。通常最好在历史中保留不良提交。