Git 受污染的远程主分支或防樱桃拾取
我遇到了远程存储库有一些“错误”提交的情况。 e、 g 其中A是坏的(但B是好的) 我希望遥控器变成Git 受污染的远程主分支或防樱桃拾取,git,Git,我遇到了远程存储库有一些“错误”提交的情况。 e、 g 其中A是坏的(但B是好的) 我希望遥控器变成 ... o ---- C ---- B origin/master \ A origin/dev 我不知道该怎么做 如果重新基准不合适,则需要不同的结果 ... o ---- C ---- A ---- B ---- ~A origin/master \
... o ---- C ---- B origin/master
\
A origin/dev
我不知道该怎么做
如果重新基准不合适,则需要不同的结果
... o ---- C ---- A ---- B ---- ~A origin/master
\
- origin/dev
这导致dev分支包含提交,而master分支不包含提交。
经修订的问题是:
如何进行反樱桃采摘?
因此,与其生成将存储库从状态C更改为a的修补程序,不如应用将B更改为a的修补程序。拉取,以便您在本地拥有相同的存储库 使用
git-rebase--interactive
(查看您是否不熟悉interactive-rebase)对A和B提交进行重新排序,以便现在
... o ---- o ---- B ---- A master
... o ---- o ---- B master
\
A dev
从该点签出新的分支开发,这样您就可以
... o ---- o ---- B ---- A master, dev
切换到主分支,执行git reset--hard HEAD^将该分支倒带一次。你现在有
... o ---- o ---- B ---- A master
... o ---- o ---- B master
\
A dev
现在,git push--force--all
你应该是金色的。(您需要--force
,因为您正在远程存储库中重写历史记录,这很危险,如果其他开发人员已经从历史记录中删除了历史记录,则不建议这样做。)
完全删除本地更改和最后一次提交(从git历史记录和文件系统中,警告:更改无法恢复),如果您设法了解出了什么问题以及如何修复当前版本,并希望返回一次提交,则此功能将非常有用。显然,共享存储库上的重基是不好的形式。在这种情况下,这是可以接受的。一般来说,虽然需要一个更通用的解决方案。反樱桃拾取被称为还原?以下是我自己的答案,无需使用
git reset
或rebase
git revert --no-edit <git commit hash>
git revert --no-edit <git commit hash>
git cherry-pick -n <git commit hash>
git reset --hard HEAD~1