咱们都会犯错误,尤为是在使用像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,可是仍是忍不住保存了下来。若是本身之后的过程遇到了这方面的知识,仍是能够翻出来看看的