咱們都會犯錯誤,尤爲是在使用像Git這樣複雜的東西時。若是你是Git的新手,能夠學習如何在命令行上開始使用Git。下面介紹如何解決六個最多見的Git錯誤。html
Photo by Pawel Janiak on Unsplashnginx
通過幾個小時的編碼後,拼寫錯誤很容易帶到你的提交消息裏面。 幸運的是,有一個簡單的解決方案。git
git commit --amend
這會打開編輯器,並容許你更改最後一次提交消息。 沒有人知道你把「addded」單詞多加了一個字母「d」的拼寫錯誤。sql
另外一個常見的Git陷阱是過早提交。 你少添加了一個文件,忘了保存它,或者須要對最後一次提交作一個小改動纔有意義。 --amend
再次成爲你的朋友。編輯器
添加錯過的文件而後運行該命令。gitlab
git add missed-file.txt
git commit --amend
此時,能夠修改提交消息,也能夠只保存它以使其保持不變。學習
但若是你的作法的正好相反呢?若是添加了不想提交的文件怎麼辦?一個環境文件,一個構建目錄,或者是一張圖片不當心保存到錯誤的目錄?這都是能夠解決的。
若是你所作的只是對文件進行了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
這將撤銷提交,刪除圖片文件,而後在其位置添加一個新的提交。命令行
你正在開發一個新特性,在匆忙之中,忘記爲它打開一個新的分支。已經提交了一堆文件,如今它們都位於主分支(master)上。幸運的是,GitLab能夠防止你直接推到master 主分支上。所以,咱們可使用如下三個命令將全部這些更改回滾到一個新分支:
Note
確保首先commit或stash更改,不然全部更改都將丟失!
git branch future-brunch
git reset HEAD~ --hard git checkout future-brunch
這會建立一個新分支,而後將主分支回滾到進行更改以前的位置,而後最終檢出新分支,並保留全部先前的更改。
對錯誤分支進行重命名的方式與用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
這個命令適用於一切都出錯的地方。 當從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,可是仍是忍不住保存了下來。若是本身之後的過程遇到了這方面的知識,仍是能夠翻出來看看的