GIT删除错误的提交,然后推送到远程存储库

时间:2020-08-06 11:56:49

标签: git

创建存储库,并在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。

我已经按照以下步骤删除了错误的提交:

  1. git恢复<>
  2. git bisect重置
  3. [推送到远程存储库]的最后一步需要帮助?最后一步如何做 注意:我已经附加了附件中显示的存储库。

[显示分支的Git控制台]

2 个答案:

答案 0 :(得分:1)

使用git revert时,您不会删除提交。 1 而是添加新的提交,特别是 2 的作用是取消上一次提交的作用。这样做的结果是根本不需要强制执行推送。可以使用普通的非强制git push发送新的提交。

请记住,git push是通过让您的Git调用其他Git来工作的。然后,您的Git和他们的Git进行某种对话,您的Git在此向他们的Git宣布您的Git为他们进行了新的提交。如果他们以前从未见过此提交, 3 他们会要求您的Git发送它。

然后,在向您发送了新的还原提交后,您的Git要求其Git设置其分支名称之一(您在git push命令中使用的名称)来记录新的作为分支中的最新提交。换句话说,他们的masterdevelop或您在此处使用的任何名称,都是他们的名称,用于控制他们喜欢的名称。您只是让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