簡體   English   中英

git,簽出到 master 上的特定提交

[英]git, checkout to specific commit on master

昨天在我的主分支中,不同的人做出了自己的提交。 最后 2 次提交是錯誤的,有沒有辦法在特定的提交中簽出以掌握?

就像是

git checkout master -some_commit

在此處輸入圖像描述

是的你可以! 您可以通過將提交 hash 作為參數傳遞來直接將 go 傳遞給您喜歡的任何提交

git checkout COMMIT_HASH

您只需查看git log即可找到提交 hash。

請記住,這很可能會讓您處於分離的 HEAD state 中。

根據評論中的討論進行編輯:您可以做的是 go 到您想要的提交,並從分離的 HEAD state 創建一個新分支。 Go 到您的新分支並cherry-pick兩個錯誤的提交。 在這一點上,他們是安全的。 您可以安全地將您的主分支恢復到您想要的正確提交,然后添加您想要的修復。 畢竟,您可以自由合並另一個分支。

  1. 簽出所需的提交
  2. 創建新分支
  3. cherry-pick新分支中的兩個提交
  4. 將 master 恢復為所需的提交。
  5. 可選:合並分支

正確答案取決於您的最終目標是什么,以及這些提交是否也存在於遠程存儲庫中。

如果您只想在應用這些提交之前查看項目的外觀,那么

git checkout bad-commit-id^

這將簽出一個不同的“分支”,稍后您可以再次簽出master

如果您的目標是更改您的存儲庫,以使這些提交基本上不再存在,您可以這樣做

git reset --hard bad-commit-id^

或者

git revert bad-commit-id

前者會清除所有bad-commit-idHEAD的提交。 后者只是通過向HEAD添加新提交來恢復單個錯誤提交。

您將選擇哪一個很大程度上取決於提交是否存在於遠程存儲庫中。 當您嘗試推送時,使用reset會導致問題,無論是對您還是對克隆存儲庫的其他人。

如果它是一個共享存儲庫,並且您不是非常復雜的 git 用戶,我建議使用git revert 如果您知道自己在做什么,那么git reset也有它的位置,但您確實需要了解這樣做的后果。

tl;dr - git revert非常安全,而git reset是一種危險但強大的工具。

你想要git reset --hard HEAD~2

HEAD~X語法是指之前的提交 X 提交

暫無
暫無

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

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