簡體   English   中英

GIT 刪除錯誤提交並推送到遠程存儲庫

[英]GIT remove the bad commit and Push to the remote repository

創建了一個存儲庫,並在 Python 中克隆了一個計算器項目。

文件 newfile.py 有代碼。 此代碼是在各種提交中編寫的。 在之前的提交中,計算器代碼運行良好。 但是,在某些提交之后,計算器代碼會顯示除以零異常。 這是由於“newfile.py”的第 2 行發生了變化。

使用 cat newfile.py 讀取文件內容

使用 git 日志檢查之前的提交。

使用 Git Bisect 查找第 2 行從“b = 20”更改為“b = 0.00000”的提交。

使用 Git Revert 刪除錯誤提交。 保持提交消息不變。

推送到遠程存儲庫。

我的做法:

我已經使用以下方法確定了錯誤提交:

git 平分開始 git 平分好 git 平分壞

經過幾個步驟后,我確定了導致問題的錯誤提交 ID。

我已按照以下步驟刪除錯誤提交:

  1. git 恢復 <>
  2. git 平分復位
  3. 在[推送到遠程存儲庫]的最后一步需要幫助?????? 如何執行此最后一步注意:我已附加附件中顯示的存儲庫。

[Git 控制台顯示分支]

當您使用git revert時,您不會刪除提交。 1相反,您添加一個新的提交,特別是一個其效果是撤消先前提交的效果的提交。 2這樣做的結果是根本不需要強迫你推動。 您的新提交可以使用普通的、非強制的git push發送。

請記住, git push通過讓您的 Git 調用其他一些 Git 來工作。 Your Git and their Git then have a sort of conversation, where your Git announces to their Git that your Git has a new commit for them. 如果他們以前從未見過此提交, 3他們會要求您的 Git 發送它。

然后,在向他們發送了您的新回復提交后,您的 Git 會要求他們的 Git 設置他們的分支名稱之一——您在git push中使用的分支名稱中一個分支命令中的最新提交。 換句話說,他們的masterdevelop或您在此處使用的任何名稱,都是他們可以隨意控制的名稱。 你只是讓你的 Git 要求他們設置他們的名字來記住你的新提交,而不是它現在記住的任何提交。

如果他們同意按照您的要求設置該名稱,則您的git push成功。 如果他們出於某種原因拒絕了該請求,那么您必須檢查他們拒絕該請求的原因,並弄清楚他們想要什么。


1通常,所有提交都是只讀的和永久的。 可以丟棄現有的提交,但是這很困難並且通常不鼓勵,除了一組特定的例外:您已經做出但沒有發送給其他任何人的任何提交 - 也就是說,您沒有使用git push發布它們其他人使用——是你的,你自己的,所以你可以刪除它們而不會產生任何后果。 刪除已發布提交的問題在於,提交有點像病毒:讓您的 Git 與另一個具有該提交的 Git 接觸,然后您再次獲得它。 因此,如果您已經發布了一些提交,那么您將其刪除,然后您連接到任何已在任何地方看到已發布提交的 Git,好吧,現在您再次擁有它。

(請注意,所有提交都是完全只讀的。某些提交的唯一 hash ID 實際上是該提交內容的加密校驗和,因此,如果您從 Git 存儲庫中提取提交並更改其內容並將其放回去,那么你得到的是一個新的提交,它有一個新的和不同的 hash ID。現有的提交保留在存儲庫中,其現有的 hash ID。)

2請注意,還原合並提交並不能撤銷合並實際發生的事實。 它只支持代碼更改。

3每個提交都有一個唯一的編號——一個hash ID——保留給那個特定的提交,並且每個Git 都同意hash ID 與提交一起使用。 因此,您的 Git 只需將其提交號提供給另一個 Git。 另一個 Git 檢查它的 database-of-all-commits,如果它沒有那個 commit,說是的,把那個 commit 發給我 如果它已經有那個提交,它說不需要,我已經有那個提交 That's how your Git and their Git can figure out which commits you have, that they don't ( git push ), or which commits they have, that you don't ( git fetch ).

$ git 平分開始

$ git 日志 --oneline

顯示帶有前綴 git 提交 id 的 gitlog 歷史記錄

$ git bisect good INITIAL COMMIT

$ git 平分壞

這將顯示錯誤提交

$git bisect 重置

$git 恢復錯誤提交

它將顯示一個帶有提交消息的簡單文本文件以及詳細信息。 保持原樣。 :wq

$git 推送

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM