2012-12-29 121 views
1

如果時間不夠,請跳過以下完全不合乎技術的,無關緊要的3段。Git - 刪除/撤消提交的方式

我一直在網上與文本流打了幾個小時,只是爲了瞭解如何恢復一個提交,後來發現這是不必要的,不需要的或錯誤的。對於git來說,有很多內容豐富的高級教程/手冊,其中大部分在事情變得複雜時未能提供實用指南。即使是在stackoverflow上的美麗答案有時可能會變得漂移和誤導,因爲最終我們是試圖實現這些答案的noobs,大多數人失敗了幾十次,並從生活中沮喪=/

當這些問題與我們有關可愛,珍貴的項目,它變得越來越可怕和壓力大,git是地獄 - 一個複雜的生物誰不願意合作大部分時間,這使事情變得更加困難(!)

很抱歉對於長篇介紹,我知道大多數人可能不會這樣做,但對於我和其他人來說,手冊和幫助以及指南有時是無奈的,而且你憑藉自己的運氣,洞察力和耐力而獨立自主。這就是爲什麼,我不打算今天問一個問題,而是回答可能一個後它成了我的可愛解決我的問題,希望它會幫助你擺脫痛苦=)


Problem:如果你已經對你的項目進行了改變,但是想要恢復它,即使有很多方法可以做到這一點,但這個對我來說已經很棒了:git rebase。不管你是否推動你的改變,我們都可以恢復提交,但是如果你已經推送了它,我們需要再次重新推動更新github上的master分支,我會在稍後再回來。

+0

恢復和刪除是不一樣的:如果你恢復,你不會失去歷史,如果你刪除你改變歷史。那麼,你最終想要什麼?如果您有其他方獲取/合併您的特定分支,完全除去是一個糟糕的主意。 – fge

+0

請以問題的形式發佈問題,並將答案作爲答案。你可以回答你自己的問題。我已將解決方案移至下面的答案。 –

+0

我同意你的看法,如果你在正確的位置編輯我的參賽作品,我會很高興,這樣這個答案可以幫助有各種問題的人。 @MadaraUchiha感謝你的努力。 – clancularius

回答

2
  • 步驟1:追蹤的順序您不需要的提交 - >git log

  • 步驟2:執行底墊以操縱提交 - >git rebase -i HEAD~n,使得 '的不想要的N =順序提交' 。示例:如果要恢復最近的提交,請將n替換爲1。

  • 步驟3:您將會看到一個編輯器,您必須在該編輯器上編輯頁面頂部的行,而不是以#開頭。每行代表一個順序的提交(最近的提交出現在頂部)。選擇要刪除的提交併刪除整個對應的行。然後在您的鍵盤上按ctrl+x,然後按'y',最後按enter。步驟4:如果一切順利,你沒問題,那個提交被刪除,你準備好跳轉'步驟9'。但是,如果情況並非如此,並且如果您收到錯誤消息,則意味着在各種提交之間存在鏈接的變化,這些變化在這些提交之間創建了依賴關係。這就是爲什麼你不能像這樣刪除一個提交,因爲它被另一個提交。首先,我們必須解決這個衝突。

  • 步驟5:由於出現錯誤,rebase可讓您進入git緩衝區,使您無需在任何分支上聯機即可更改文件路徑等更改。無論如何,在這一點上,檢查狀態 - >git status

  • 第6步:正如你可以看到,有'changes to be committed'或/和'unmerged paths'。您首先必須通過此命令逐個添加它們 - >git add any_file_path

  • 第7步:現在是時候提交了。這些更改將更新另一個現有的提交,這取決於您刪除的提交。請記住,由於衝突和提交更新而顯示錯誤,錯誤將得到解決。 - >git commit

  • 第8步:現在,您可以從git log檢查不需要的提交已被刪除。現在是繼續前進的時候了。 - >git rebase --continue

  • 第9步:執行git status並確定是否需要'強制推送'。如果您之前已經推送了不需要的提交,那麼您會在'狀態'中看到您與「主/來源」不同。你也可以看到'origin/master'的提交比你現在更多,因爲你剛纔刪除了一些。現在,該更新github上的master分支了。如果狀態一切正常(這意味着您之前沒有推送不需要的提交),則跳過下一步。

  • 第10步:爲了更新github,只需執行強制推送。 - >git push origin +master

  • 第11步:恭喜!你完成了你的目標。現在,您可以從本地回購和github上免除不必要的提交。從git status您可以看到,自從您同步後,您不再偏離「起源/主」,您可以從git log確認不需要的提交的死亡。您也可以登錄'github'並通過點擊'提交'從那裏檢查。


這是現在所有。我可能犯了錯誤,並會理解任何正確的編輯。