本地分支从Origin分支分歧但我不想合并/ fastforward

时间:2012-10-25 16:37:22

标签: git

已将几个提交推送到原始分支。这些提交包含导致问题的代码。为了解决问题,我在问题开始之前对提交做了git reset --hard <sha>

我已经修复了问题并在本地提交。现在我想推送到Origin,但我不能,因为我的分支是由5次提交(导致问题)和提前1次提交(修复提交)。即。分歧。

我不想合并来自Origin的任何更改。如何将Origin的头部设置为我的本地提交的头部,而不将合并提交到我的本地分支?

谢谢!

2 个答案:

答案 0 :(得分:6)

干净的方式(保存历史)

  1. 在您当前的提交中创建一个本地错误修复分支
  2. 结帐主人(或其他任何来源)并快速将其拉到破碎的远程HEAD
  3. git revert糟糕的提交(你分叉的最后一个好的 sha 和远程HEAD之间的所有内容)...这会在保留所有历史记录时删除不需要的更改
  4. 将你的bugfix分支合并到master:现在所有master的更改都已恢复,这将是一个简单的合并
  5. 肮脏的方式(丢弃历史记录,将远程分支上的其他任何人解散)

    1. 只需使用git push -f(仔细检查您是否拥有正确的选项&refspec)并希望其他任何人的远程分支历史记录不会在其下方发生变化

答案 1 :(得分:2)

如果您不想丢弃其他人在这些错误提交中所做的事情,即保留历史记录,但只是为了拒绝那里发生的更改,您可以使用ours合并策略:

git merge -s ours badbranch

这实际上创建了一个合并提交,它只接受当前分支的所有更改。它将完全忽略badbranch上发生的事情,但仍会包含历史记录中的内容。所以你可以查看那里发生的变化,但它们不会影响你当前的版本。

否则,如果您只是想完全抛弃它们,并且如果您完全控制存储库并且不关心从存储库中提取的其他存储库,则可以覆盖该分支,实质上从存储库中删除这些提交(除非你有另一个分支指向它)。你通过强制推送来做到这一点:

git push origin master -f

请注意,这会为可能已经获取这些更改的存储库中的其他所有人创建冲突,因此请不要这样做,除非您确实知道它。通常最好在历史中保留不良提交。