我們都會犯錯誤,尤其是在使用像Git這樣復雜的東西時。如果你是Git的新手,可以學習如何在命令行上開始使用Git。下面介紹如何解決六個最常見的Git錯誤。
Photo by Pawel Janiak on Unsplash
1. 最后一次代碼提交時有拼寫錯誤
經過幾個小時的編碼后,拼寫錯誤很容易帶到你的提交消息里面。 幸運的是,有一個簡單的解決方案。
git commit --amend
這會打開編輯器,並允許你更改最后一次提交消息。 沒有人知道你把“addded”單詞多加了一個字母“d”的拼寫錯誤。
2. 忘了在最后一次提交中添加文件
另一個常見的Git陷阱是過早提交。 你少添加了一個文件,忘了保存它,或者需要對最后一次提交做一個小改動才有意義。 --amend
再次成為你的朋友。
添加錯過的文件然后運行該命令。
git add missed-file.txt
git commit --amend
此時,可以修改提交消息,也可以只保存它以使其保持不變。
3. 在代碼庫中添加了一個不想要的文件
但如果你的做法的正好相反呢?如果添加了不想提交的文件怎么辦?一個環境文件,一個構建目錄,或者是一張圖片不小心保存到錯誤的目錄?這都是可以解決的。
如果你所做的只是對文件進行了stage操作放入了暫存區,還沒有commit本地代碼倉庫,那么只需重新設置暫存區的文件即可:
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
這將撤銷提交,刪除圖片文件,然后在其位置添加一個新的提交。
4. 提交了所有的修改到 master 分支
你正在開發一個新特性,在匆忙之中,忘記為它打開一個新的分支。已經提交了一堆文件,現在它們都位於主分支(master)上。幸運的是,GitLab可以防止你直接推到master 主分支上。因此,我們可以使用以下三個命令將所有這些更改回滾到一個新分支:
Note
確保首先commit或stash更改,否則所有更改都將丟失!
git branch future-brunch
git reset HEAD~ --hard git checkout future-brunch
這會創建一個新分支,然后將主分支回滾到進行更改之前的位置,然后最終檢出新分支,並保留所有先前的更改。
5. 分支名稱出現了拼寫錯誤
對錯誤分支進行重命名的方式與用mv
命令重命名文件的方式類似:將它移動到一個新的位置,並使用正確的名稱。例如把future-brunch分支名稱更改為feature-branch。
git branch -m future-brunch feature-branch
如果已經push了這個分支到遠程代碼倉庫,那么還需要一些額外的步驟。需要從遠程代碼倉庫刪除舊的分支,將新分支 push 上去:
git push origin --delete future-brunch git push origin feature-branch
6. 重復操作
這個命令適用於一切都出錯的地方。 當從Stack Overflow復制粘貼一個太多的解決方案時,
代碼倉庫處於比你一開始時更糟糕的狀態。
git reflog
向你顯示所有的事情列表。然后,它允許你使用Git的神奇時間旅行技巧,回退到過去的任何時間點。這里應該指出,這是最后的手段,不應該輕易使用。要得到這個列表,輸入:
git reflog
我們采取的每一步,我們所做的每一個動作,Git都有記錄。 在我們的項目上運行該命令得到以下列表:
3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/future-brunch to refs/heads/feature-branch 3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to future-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,但是還是忍不住保存了下來。如果自己以后的過程遇到了這方面的知識,還是可以翻出來看看的