创建存储库,并在Python中克隆一个计算器项目。
文件newfile.py具有代码。这段代码是用各种提交编写的。在之前的提交中,计算器代码运行良好。但是,在执行某些提交后,计算器代码将显示除以零的异常。这是由于“ newfile.py”的第2行发生了更改。
使用cat newfile.py读取文件内容
使用git log检查以前的提交。
使用Git Bisect查找第2行从'b = 20'变为'b = 0.00000'的提交。
使用Git Revert删除错误的提交。保持提交消息不变。
推送到远程存储库。
我的方法:
我已经使用:
确定了错误的提交git bisect开始 git bisect好 git bisect不好
几步后,我确定了导致问题的错误提交ID。
我已经按照以下步骤删除了错误的提交:
[显示分支的Git控制台]
答案 0 :(得分:1)
使用git revert
时,您不会删除提交。 1 而是添加新的提交,特别是 2 的作用是取消上一次提交的作用。这样做的结果是根本不需要强制执行推送。可以使用普通的非强制git push
发送新的提交。
请记住,git push
是通过让您的Git调用其他Git来工作的。然后,您的Git和他们的Git进行某种对话,您的Git在此向他们的Git宣布您的Git为他们进行了新的提交。如果他们以前从未见过此提交, 3 他们会要求您的Git发送它。
然后,在向您发送了新的还原提交后,您的Git要求其Git设置其分支名称之一(您在git push
命令中使用的名称)来记录新的作为其分支中的最新提交。换句话说,他们的master
或develop
或您在此处使用的任何名称,都是他们的名称,用于控制他们喜欢的名称。您只是让Git要求他们设置他们的名称来记住您的新提交,而不是现在记住的任何提交。
如果他们同意按您的要求设置该名称,则您的git push
成功。如果他们出于某种原因拒绝了该请求,则然后您必须检查为什么拒绝了该请求,并找出他们想要的东西。
1 通常,所有提交都是 只读且永久的。 可能会丢弃现有的提交,但是这很困难且通常不鼓励这样做,但有一组特殊例外:您所做的任何提交,但不是发送给其他任何人(也就是说,您没有使用git push
来发布供其他人使用),这些都是您本人和您本人的,因此您可以删除它们而不会造成任何后果。删除已发布的提交的问题在于,提交有点像病毒:将您的Git与具有该提交的另一个Git联系,然后再次获取它。因此,如果您已经发布了某个提交,则将其删除,然后连接到任何地方都可以看到已发布的提交的Git,好了,现在又有了它。
(请注意,所有提交都是完全只读的。某些提交的唯一哈希ID实际上是该提交内容的加密校验和,因此,如果您从Git存储库中提取一个提交并更改其内容并将其放入返回,您得到的是一个具有新的和不同的哈希ID的新提交。现有的提交保留在存储库中,带有其现有的哈希ID。)
2 请注意,还原 merge 提交不会撤消合并实际上发生的事实。它只撤消代码更改。
3 每个提交都有一个唯一的编号(一个哈希ID ),该编号保留给该特定提交,并且每个地方的每个 Git都同意 that 哈希ID与 that 提交一起使用。因此,您的Git只需向其他Git提交其提交编号。 是的,另一个Git检查它的所有提交数据库,如果它没有该提交,请把该提交发送给我。如果已经具有该提交,则说不需要,我已经具有该提交。这样,您的Git及其Git就能弄清楚您拥有哪些提交(git push
),或者您没有拥有哪些提交(git fetch
)。
答案 1 :(得分:0)
$ git bisect开始
$ git log --oneline
显示带有前缀git commit id的gitlog历史记录
$ git bisect好 INITIAL COMMIT
$ git bisect不好
这将显示错误的提交
$ git bisect重设
$ git恢复错误提交
它将显示带有提交消息以及详细信息的简单文本文件。 照原样离开。 :wq
$ git push