6種常見的Git錯誤以及解決的辦法

咱們都會犯錯誤,尤爲是在使用像Git這樣複雜的東西時。若是你是Git的新手,能夠學習如何在命令行上開始使用Git。下面介紹如何解決六個最多見的Git錯誤。html


Photo by Pawel Janiak on Unsplashnginx

1. 最後一次代碼提交時有拼寫錯誤

通過幾個小時的編碼後,拼寫錯誤很容易帶到你的提交消息裏面。 幸運的是,有一個簡單的解決方案。git

git commit --amend

這會打開編輯器,並容許你更改最後一次提交消息。 沒有人知道你把「addded」單詞多加了一個字母「d」的拼寫錯誤。sql

2. 忘了在最後一次提交中添加文件

另外一個常見的Git陷阱是過早提交。 你少添加了一個文件,忘了保存它,或者須要對最後一次提交作一個小改動纔有意義。 --amend 再次成爲你的朋友。編輯器

添加錯過的文件而後運行該命令。gitlab

git add missed-file.txt
git commit --amend

此時,能夠修改提交消息,也能夠只保存它以使其保持不變。學習

3. 在代碼庫中添加了一個不想要的文件

但若是你的作法的正好相反呢?若是添加了不想提交的文件怎麼辦?一個環境文件,一個構建目錄,或者是一張圖片不當心保存到錯誤的目錄?這都是能夠解決的。
若是你所作的只是對文件進行了stage操做放入了暫存區,尚未commit本地代碼倉庫,那麼只需從新設置暫存區的文件便可:編碼

git reset /assets/img/misty-and-pepper.jpg

若是已經提交了更改,那麼須要先運行一個額外的步驟:spa

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,可是仍是忍不住保存了下來。若是本身之後的過程遇到了這方面的知識,仍是能夠翻出來看看的
相關文章
相關標籤/搜索