最常見的 Git 錯誤都有哪些,如何解決它們?
如果您曾經與許多開發者一起開發一個大專案,那麼使用 Git 作為版本控制是一個最好的選擇。 不過 Git 很複雜,使用過程中經常會犯各種錯誤。 在本文中,我將討論程式設計師在使用Git時所犯的一些常見錯誤以及如何解決它們。
拼寫錯誤的最後提交訊息
經過幾個小時的編碼後,您的提交訊息可能存在很多拼寫錯誤,好在有一個簡單的解決方案:
git commit --amend
該命令將開啟您的編輯器,並允許您更改最後一次提交訊息。 因為可能沒人會注意到你寫的 “Initial commment” 有三個 m。
拼寫錯誤的分支名
假設已經是下午三點了,但是你還沒有吃午飯。飢腸轆轆的你可能直接就用 feature-brunch 作為你的分支名了,哇塞,好美味啊。可是很明顯你寫錯了,應該是 feature-branch 。所以你可以使用 mv
你可以使用 mv 命令類似重新命名檔案的方式重新命名此分支:將其移動到具有正確名稱的新位置。
如:
git branch -m feature-brunch feature-branch
但如果您已推送此分支,則需要執行幾個額外步驟。 我們需要從遠端刪除舊分支並推送新分支:
git push origin --delete feature-brunch
git push origin feature-branch
不小心將所有更改提交到主分支
你可能正在開發一項新功能,由於太倉促,你忘記為它開啟一個新的分支。 這時候已經提交了大量檔案,而且這些提交都位於主分支上。
現在我們需要使用以下三個命令將所有這些更改回滾到新分支:
注意:確保先提交或儲存更改,否則一切都將丟失!
git branch feature-branch
git reset HEAD~ --hard
git checkout feature-branch
這將建立一個新分支,然後將主分支回滾到您進行更改之前的位置,然後最終檢出您之前所有更改完整的新分支。
忘了將檔案新增到最後一次提交
另一個常見的 Git 陷阱是過早提交。你可能錯過了一個檔案,忘了儲存它,或者需要對最後一次提交做一個小改動。 這時候 --amend 再次成為你的朋友。
新增忘掉的檔案,然後執行該此靠譜命令:
git add missed-file.txt git commit --amend
此時,您可以修改提交訊息,也可以只儲存它以使其保持不變。
將錯誤的檔案新增到倉庫
但是如果你做的恰恰相反呢? 如果您添加了一個不想提交的檔案,該怎麼辦? 一個流氓ENV檔案,一個構建目錄,一個你不小心儲存到錯誤資料夾的狗的圖片? 這一切都是可以解決的。
如果您所做的只是暫存檔案但尚未提交,那就像重置該暫存檔案一樣簡單:
git reset /assets/img/misty-and-pepper.jpg
如果你已經提交了這些改變,那也不用擔心了。 您只需要在之前執行額外的步驟:
git reset --soft HEAD~1
git reset /assets/img/misty-and-pepper.jpg
rm /assets/img/misty-and-pepper.jpg
git commit
上述命令將撤消提交,刪除影象,然後在其位置新增新提交。
天啊,我又幹蠢事了!
這個命令適用於一切都出錯的地方。 當您從Stack Overflow中複製貼上太多解決方案時,您的repo處於比啟動時更糟糕的狀態。 我們都去過那兒。
git reflog 顯示了您已完成的所有事情的列表。 然後它允許你使用Git的神奇時間旅行技能回到過去的任何一點。 但是你不應該輕易使用。
要獲取此列表,請鍵入:
git reflog
我們所做的每一個動作,Git 都記錄下來。下面是執行該命令的輸出示例:
3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/feature-brunch to refs/heads/feature-branch
3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to feature-brunch
2b7e508 (master) HEAD@{3}: reset: moving to HEAD~
3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo
2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1
37a632d HEAD@{6}: commit: Adds the client logo to the project
2b7e508 (master) HEAD@{7}: reset: moving to HEAD
2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the site
dfa27a2 HEAD@{9}: reset: moving to HEAD
dfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site
700d0b5 HEAD@{11}: commit: Addded contributing info to the site
efba795 HEAD@{12}: commit (initial): Initial commit
記下最左邊的列,因為這是索引。 如果要返回歷史記錄中的任何一點,請執行以下命令,將{index}替換為該引用,例如dfa27a2。
git reset HEAD@{index}
你是否有自己的一些Git技巧嗎? 歡迎分享!