簡體   English   中英

如何使用 git 加載項目的倒數第二個提交版本?

[英]How do I load the second to last committed version of my project using git?

假設我進行了一些更改並執行了以下操作:

git add -A
git commit -m "comment commit_1"

現在我進行了更多更改並再次執行此操作:

git add -A
git commit -m "comment commit_2"

現在,我基本上想放棄 commit_2 並在 commit_1 點再次開始修改我的項目。

我該怎么做呢?

如果您根本不介意丟失修訂版(就好像它們根本沒有發生一樣),您可以這樣做:

git reset --hard HEAD~

如果您想保留當前歷史記錄並在擺脫修訂更改的地方獲得新版本,您可以執行以下操作:

git checkout HEAD~
git reset --soft the-branch
git commit -m "Taking back changes from the last revision"
# And if you like the result of this:
git branch -f the-branch
git checkout the-branch

你去吧。

現在,我基本上想放棄 commit_2 並在 commit_1 點再次開始修改我的項目。

如果您真的想丟棄commit_2 ,那么您可能可以使用

git reset --hard HEAD^

(請注意,在我寫這篇文章的時候,另一篇文章錯誤地告訴你使用HEAD~2 ;這會丟棄兩個提交,這不是所要求的。)

使用從分支中刪除提交的命令有一些注意事項。

第一個是您可能會丟失在受影響的提交中所做的更改。 這似乎是一個奇怪的警告 - 您詢問了如何放棄更改 - 但意識到錯誤發生時,需要小心這些命令。 (只是為了澄清 - 如果您不小心做了這樣的事情,更改不會立即永遠丟失;reflogs 提供了一個小安全網。)

如果您的 repo 有遙控器並且您已將有問題的提交推送到任何遙控器,則會出現其他問題。 這聽起來不像這里的問題,但如果是,那么在從分支中刪除提交之前,您應該考慮更多。

但是,如果您仔細查看並確定您真的只想放棄提交,則上述方法應該可行。 請注意, HEAD^只是引用倒數第二次提交的可能表達式之一。 目前它可能是最簡單的使用方法,但它並不總是指那個特定的提交。 HEAD^真正的意思是“作為當前簽出提交的父提交的提交”。

如果您在master分支上,那么master^也可以工作 - 並且不依賴於當前簽出的內容。 即使master分支移動時也會發生變化; 如果由於某種原因您需要一個繼續引用特定提交的表達式,您可以創建一個標簽

git tag mytag master^

然后mytag就可以工作了; 或者您可以查找相關提交的提交 ID(盡管它不會是用戶友好的名稱)

但我離題了...

這不同於 - 並且比 - 僅僅像問題標題所暗示的那樣加載倒數第二次提交。 要簡單地使用倒數第二次提交的狀態更新您的工作樹,您可以

git checkout HEAD^

這會移動HEAD (即更改已檢出的內容)並更新索引和工作樹,但它仍將提交保留在master ,以防您以后再次需要它。 然而,它也會讓你處於一種稱為“分離頭”的狀態,這意味着 git 並不真正期望你從這里創建新的提交。

如果您想保留舊提交,並處於可以在commit_1之上添加提交的commit_1 ,那么您需要創建一個新分支。 如果您執行了之前的結帳命令,則可以

git checkout -b mybranch

並且可以將新更改提交到新分支,同時將原始commit_2留在master 或者,您可以在commit_2上放置一個分支(或標簽),然后將master移回commit_1

git checkout master
git branch mybranch
git reset --hard HEAD^

這似乎是一個令人困惑的選項; 但實際上這是因為每個人都有不同的目的,只有參與您的項目的人才有可能擁有所有上下文來決定哪個有意義。

所以 tl;dr -聽起來您可能正在尋找git reset ,但僅當您真的打算永久丟棄來自commit_2的更改時才適合單獨這樣做。 如果您真的想保留它們以備將來參考(但也許只是不確定這是否是一種選擇),那么也有辦法做到這一點。

暫無
暫無

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

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