ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

13-修复已推送到远程库的内容

13-修复已推送到远程库的内容 有的时候代码已经push到中央仓库才发现有个commit写错了。这种问题的处理分两种情况1. 出错的内容在你自己的 branch假如是某个你自己独立开发的branch出错了不会影响到其他人那没关系用前面几节讲的方法把写错的commit修改或者删除掉然后再push上去就好了。不过……由于你在本地对已有的commit做了修改这时你再push就会失败因为中央仓库包含本地没有的commits。但这个和前面讲过的情况不同这次的冲突不是因为同事push了新的提交而是因为你刻意修改了一些内容这个冲突是你预料到的你本来就希望用本地的内容覆盖掉中央仓库的内容。那么这时就不要乖乖听话按照提示去先pull一下再push了而是要选择「强行」pushgit push origin branch1 -f-f是--force的缩写意为「忽略冲突强制push」。这样在本地修改了错误的commits然后强制push上去问题就解决了。2. 出错的内容已经合并到 master这就不能用上面那招了。同事的工作都在master上你永远不知道你的一次强制push会不会洗掉同事刚发上去的新提交。所以除非你是人员数量和行为都完全可控的超小团队可以和同事做到无死角的完美沟通不然一定别在master上强制push。在这种时候你只能退一步选用另一种策略增加一个新的提交把之前提交的内容抹掉。例如之前你增加了一行代码你希望撤销它那么你就做一个删掉这行代码的提交如果你删掉了一行代码你希望撤销它那么你就做一个把这行代码还原回来的提交。这种事做起来也不算麻烦因为 Git 有一个对应的指令revert。它的用法很简单你希望撤销哪个commit就把它填在后面git revert HEAD^上面这行代码就会增加一条新的commit它的内容和倒数第二个commit是相反的从而和倒数第二个commit相互抵消达到撤销的效果。在revert完成之后把新的commit再push上去这个commit的内容就被撤销了。它和前面所介绍的撤销方式相比最主要的区别是这次改动只是被「反转」了并没有在历史中消失掉你的历史中会存在两条commit一个原始commit一个对它的反转commit。小结这节的内容是讲当错误的commit已经被push上去时的解决方案。具体的方案有两类如果出错内容在私有branch在本地把内容修正后强制push(push -f一次就可以解决如果出错内容在master不要强制push而要用revert把写错的commit撤销。
返回列表