團隊開發中經常遇到錯誤刪除檔案,錯誤提交等情況,那麼使用git該如何正確的進行撤銷和恢復呢?
git commit –c head –a --amend
增補提交只能針對最後乙個提交,如果想更正好幾個提交之前的某個錯誤,則須使用git revert這個命令。
反轉已經提交的改動,使用git revert命令,此命令通過在版本庫中建立乙個「反向的」新提交來抵消原來提交的改動。
通常git會立即提交反轉結果,但是也可以通過引數-n告訴git先不要提交,這用於反轉多個提交非常有用,執行多個git revert –n命令,git會暫存所有的變更,然後做一次性提交。
做反轉操作的時候必須提供提交名稱,反轉總是按照從新到舊點的倒序來操作的,即最後的提交最先反轉,這樣可以避免一些不必要的衝突。
命令git reset可以在復位版本庫後,暫存工作目錄樹中因復位產生的與版本庫的差異,以便提交。
git reset --soft 該命令撤消上乙個commit,但保留add的檔案,使得git暫存所有的因復位帶來的差異,但不提交它。
之後,使用者可以修改這些內容再提交,或者乾脆扔掉這些內容。
選項--hard要小心使用,該選項會從版本庫和工作目錄樹中同時刪除提交,--hard就好像版本庫中的刪除鍵,並且不可恢復。
git reset是以提交名稱作為引數的,預設值是head,可以用^和~作為提交名稱的修飾符來指定某個版本。
head^是指把版本庫復位到當前head之前的那個節點上,把head這個版本的修改扔到工作目錄樹中,
540ecb7~3是指要復位到540ecb7之前的三個節點上,即把該提交和之前的兩個提交(共三個提交)扔到工作目錄樹中。
git reset --hard head^ 強制復位前乙個提交。
git reset head可以用來清除已經add到快取區但是不想進一步提交的內容。
另一種方式是用git rm --cached,選項--cached表明是清除快取區,然後不動工作目錄樹。
注意git checkout filename將會刪除該檔案中所有沒有暫存和提交的改動,這個操作是不可逆的。
先使用git log 檢視 commit日誌
commit 422bc088a7d6c5429f1d0760d008d86c505f4abe
author: test date: tue sep 4 18:19:23 2015 +0800
注釋-本次為錯誤提交
commit 8da0fd772c3acabd6e21e85287bdcfcfe8e74c85
merge: 461ac36 0283074
author: test date: tue sep 4 18:16:09 2015 +0800
找到需要回退的那次commit的 雜湊值,使用下面的命令進行回退:
git reset --hard commit_id
注意--hard可以把已經add的檔案也刪掉,謹慎使用。
直接從本地把檔案checkout出來就可以了,用不著從遠端伺服器上pull下來,因為,所有的歷史版本你的本地都有的。
具體做法 git checkout file 同時恢復多個被刪除的檔案:
git ls-files -d | xargs -i git checkout {}
在使用git的過程中,有時可能會有一些誤操作
比如:執行checkout -f 或 reset -hard 或 branch -d刪除乙個分支
結果造成本地(遠端)的分支或某些commit丟失
這時,我們可以通過reflog來進行恢復,前提是丟失的分支或commit資訊沒有被git gc清除
一般情況下,gc對那些無用的object會保留很長時間後才清除的
reflog是git提供的乙個內部工具,用於記錄對git倉庫進行的各種操作
可以使用git reflog show或git log -g命令來看到所有的操作日誌
恢復的過程很簡單:
1. 通過git log -g命令來找到我們需要恢復的資訊對應的commitid,可以通過提交的時間和日期來辨別
2. 通過git branch recover_branch commitid 來建立乙個新的分支
這樣,我們就把丟失的東西給恢復到了recover_branch分支上了
《版本控制之道——使用git》
git 提交撤銷操作
在使用 git 做專案管理的時候,難免會出現一些錯誤操作,此時,撤銷就是很好的挽救方式。如果不行,那就gg了 首先是git add誤操作,不小心將不需要跟蹤 track 的檔案新增上了,比如 vscode dist 等檔案或資料夾。此時的撤銷操作為git reset會將所有add 的檔案全部撤回,g...
git 撤銷相關操作
每次使用 git 需要進行版本回退相關的操作都要在搜尋引擎重新查詢相關命令,很是費時間,今天有空總結一下,算是記筆記方便以後使用。git reset hard如果本地檔案修改得一團亂,但是還沒有 commit,可以通過這個命令恢復到上次 commit 的狀態。git reset hard commi...
git撤銷已修改的提交
1.使用git checkout 檔名 可以撤銷此檔案修改的提交。2.使用git checkout 可以撤銷所有檔案修改的提交。3.如果是新增的檔案,那麼上述兩種方法是不可以的,可以直接刪除掉 1.使用git reset head 檔名 2.使用git reset head 需要注意的是上述操作並不...