4 回答

TA貢獻1946條經(jīng)驗 獲得超3個贊
如果您不知道它是如何工作的,撤消提交有點可怕。但是如果你理解的話,它實際上非常容易。
假設(shè)您有這個,其中C是您的HEAD,(F)是您的文件的狀態(tài)。
(F)
A-B-C
↑
master
你想要提交C并且永遠不會再看到它。你做這個:
git reset --hard HEAD~1
結(jié)果是:
(F)
A-B
↑
master
現(xiàn)在B是HEAD。因為您使用過--hard,您的文件將重置為它們在提交B時的狀態(tài)。
啊,但是假設(shè)提交C不是災難,而是一點點關(guān)閉。您希望撤消提交,但在進行更好的提交之前,請保留更改以進行一些編輯。從這里開始,用C作為你的HEAD:
(F)
A-B-C
↑
master
你可以這樣做,不用了--hard:
git reset HEAD~1
在這種情況下,結(jié)果是:
(F)
A-B-C
↑
master
在這兩種情況下,HEAD只是指向最新提交的指針。當你這樣做時git reset HEAD~1,你告訴Git將HEAD指針移回一次提交。但是(除非你使用--hard)你保留文件原樣。所以現(xiàn)在git status顯示你已經(jīng)檢查過C的變化。你沒有丟失任何東西!
對于最輕微的觸摸,您甚至可以撤消提交,但保留文件和索引:
git reset --soft HEAD~1
這不僅會使您的文件單獨存在,甚至會使您的索引單獨存在。執(zhí)行此操作時git status,您將看到索引中的文件與以前一樣。事實上,在這個命令之后,你可以做,git commit而你將重做你剛才所做的相同提交。
還有一件事:假設(shè)你在第一個例子中銷毀了一個提交,但后來發(fā)現(xiàn)你需要它呢?運氣好,對嗎?
不,還有仍辦法把它找回來。鍵入git reflog,你會看到你已經(jīng)移動過的(部分)提交shas(即散列)的列表。找到你銷毀的提交,并執(zhí)行以下操作:
git checkout -b someNewBranchName shaYouDestroyed
你現(xiàn)在復活了這個提交。提交實際上并沒有在Git中被摧毀大約90天,所以你通??梢曰厝フ纫粋€你不想甩掉的人。

TA貢獻2019條經(jīng)驗 獲得超9個贊
添加/刪除文件以獲得您想要的方式:
git rm classdir git add sourcedir
然后修改提交:
git commit --amend
之前的錯誤提交將被編輯以反映新的索引狀態(tài) - 換句話說,它就像你從未犯過錯誤一樣。
請注意,只有在尚未推送的情況下才應(yīng)執(zhí)行此操作。如果你已推,那么你只需要正常提交修復。
- 4 回答
- 0 關(guān)注
- 6199 瀏覽
添加回答
舉報