繁体   English   中英

许多不良合并后,将git恢复为特定的提交

[英]Revert git to a specific commit after many bad merges

好的,我对git非常熟悉,包括git revert和git reset。 我认为我想做的事情无法完成,而只是想仔细检查一下。

假设我有一个回购,同事在其中进行了数十次错误的合并提交。 我想将存储库重置回最近一次的正确提交。 我不想使用重置,而不必强制执行,因为那样会弄乱我所有其他同事的本地副本。 我也不认为还原可以很容易地撤消数十个合并提交。

我最好的主意是克隆存储库的第二个副本,签出正确的提交,然后转到我的原始本地副本,创建一个分支,删除每个文件,然后复制第二个存储库中的所有内容。 然后提交,推送,正常合并。 我可以对此进行改进吗?

是的,您可以将所有这些合并到一个git repo上的操作中。

git checkout <branch in question>
rm -Rf * # This will leave the .git directory and any other hidden files in the root that you may need to manually further deal with
git checkout <good sha> -- .
git add .
# commit, test, etc. as required

试试这个,为您的提交哈希<commit>

git revert --no-commit <commit>..HEAD
git commit -m "Reverted a bunch of bad merges"

如果您不介意运行管道命令,则有一个单一选项。 master (或任何分支将接收新的“还原”提交)签出:

 git reset --hard `git commit-tree -p HEAD -m "revert to last good state" <good-commit>^{tree}`

其中<good-commit>是您想要其状态的提交的ID(或其他有效名称-可能是标记,或类似HEAD~15的表达式)。

这确实使用了reset ,但是这样做的方式符合分支移动的“正常”方向,因此不需要强制推动,也不需要清理其他存储库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM