我遇到远程存储库有一些“错误”提交的情况。 e.g。
... o ---- C ---- A ---- B origin/master
哪里A不好(但B很好) 我希望遥控器变成......
... o ---- C ---- B origin/master
\
A origin/dev
对我来说,如何做到这一点并不明显。
如果不适合使用rebase,则需要不同的结果。
... o ---- C ---- A ---- B ---- ~A origin/master
\
- origin/dev
这会导致包含A提交的dev分支和不包含A提交的master。 修订后的问题是: 怎么做反樱桃挑选? 因此,不是生成将存储库从状态C更改为A的补丁,而是应用将B更改为A的补丁。
答案 0 :(得分:3)
拉,以便您在本地拥有相同的存储库。
使用git rebase --interactive
(如果您不熟悉交互式rebase,请参阅this rundown)重新排序A和B提交,以便您现在拥有
... o ---- o ---- B ---- A master
从那个地点结帐新的分支机构,以便获得
... o ---- o ---- B ---- A master, dev
切换到主分支,执行git reset --hard HEAD^
以回退该分支一个提交。你现在有了
... o ---- o ---- B master
\
A dev
现在git push --force --all
你应该是金色的。 (您需要--force
,因为您正在重写远程存储库中的历史记录,这很危险,如果其他开发人员已经从中撤出,则不推荐使用。)
答案 1 :(得分:0)
git revert -n <git commit hash>
还原特定更改,但将提交更改保留在本地-如果您不想还原所有内容,而只是还原某些内容(这也是Tortoise Git的行为),则很有用。
git revert --no-edit <git commit hash>
还原特定更改,并将更改提交到git(但不将其推送到服务器)-以防万一您想返回旧版本以了解做错了什么。
git revert --no-edit <git commit hash>
git cherry-pick -n <git commit hash>
将更改还原到旧版本并选择对本地文件的提交更改,因此您可以从以前的相同位置继续。对于重新开始解决问题很有用,以前的提交更改为“工作草案”。
如果您决定以后再提交更改,则最终将提交两次而不是一次。 (一次还原提交,一次向前提交)-或者您也可以还原所有本地更改,最后一次还原提交使用:
git reset --hard HEAD~1
删除本地更改并完全上一次提交(从git历史记录和文件系统中,警告:无法恢复更改),如果您设法了解出了什么问题以及如何修复当前版本,以及想退回一次提交。