1. 程式人生 > >最常見的 Git 錯誤都有哪些,如何解決它們?

最常見的 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技巧嗎? 歡迎分享!

本文翻譯自