Lea*_*Dev 4 git merge github git-revert
master过去一个月一直在研究Current 。一个名为的分支contract也在同时进行。
contract被master错误地合并了。100 次提交,日期与master已经存在的提交重叠。
我怎样才能完全删除所有合并提交100从拉入请求contract到master?
我们对拉取请求进行了 GitHub 恢复,并删除了代码但没有删除历史记录。现在,当我们尝试执行合并contract到master其中的模拟拉取请求时,显示没有任何更改。(我假设是因为那些提交已经进入但被恢复了?)
master除了还原之外,合并后没有任何提交。
如何完全删除拉取请求添加的任何提交,并在我们最终合并contract到master.
您的历史记录可能如下所示:
*--*--*--C---A--B [master]
\ /
*--*--*--*--* [contract]
Run Code Online (Sandbox Code Playgroud)
哪里A是坏合并,B是还原,C是合并前的最后一个好的提交。(要确定您的情况的哈希值,请执行例如git log --oneline --decorate。)
当您恢复合并时,Git 认为这意味着您永远不希望将这些更改重新合并到存储库中。如果您只是从命令行工作,则解决方案是还原还原,请参阅:在 Git 中重新进行还原合并。但是,这会阻止您使用 GitHub 的 PR UI。
相反,您可以改写历史。强制性警告:重写历史记录对于使用您的存储库的其他开发人员来说可能是危险和破坏性的。一定要清楚地传达你正在这样做。
如果您还没有,请切换到master( git checkout master)。
如果C除了A,之后没有任何提交B,以及来自 的任何提交contract,请执行以下操作:
git reset --hard HEAD~2
Run Code Online (Sandbox Code Playgroud)
或者:
git reset --hard C
Run Code Online (Sandbox Code Playgroud)
那么您的历史记录将如下所示:
*--*--*--C [master]
\
*--*--*--*--* [contract]
Run Code Online (Sandbox Code Playgroud)
如果在此期间有更多提交,那么您将不得不改用变基。做:
git rebase -i X
Run Code Online (Sandbox Code Playgroud)
在rebase-todo文件中,删除与contract分支对应的所有行,以及还原提交B。(在我的测试中,A未显示合并提交,但如果有则将其删除。)如果有任何冲突,请修复它们并继续使用git rebase --continue.
完成重写历史记录后,请执行以下操作:
git push --force-with-lease origin master
Run Code Online (Sandbox Code Playgroud)
您的master分支现在将没有合并发生过的证据,并且来自 PRcontract应该显示所有预期的提交。
| 归档时间: |
|
| 查看次数: |
12470 次 |
| 最近记录: |