我们都会犯错误,尤其是在使用像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}

Note

文章原文:Git happens! 6 Common Git mistakes and how to fix them

文章作者:Sam Beckham

6种常见的Git错误以及解决的办法的更多相关文章

  1. 常见的SQL错误和解决方法

    前言 今天你会看到每个人——从新手到专家——在使用SQL时犯的各种常见错误.你不能永远避免犯任何错误,但是熟悉广泛的错误将帮助你在尽可能短的时间内解决这些错误. 注:在我们的例子中我们使用的是Orac ...

  2. 8种常见的SQL错误用法

    常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字 ...

  3. WebStorm中将Project分享到GitHub时报“Error Running Git”错误的解决办法

    错误信息 Cannot run program "git.exe":CreateProcess error=2,系统找不到指定的文件. 解决办法 从错误信息就可以知道,WebSto ...

  4. git中报unable to auto-detect email address 错误的解决拌办法

    昨天刚配置好的git,今天刚要commit一些修改,就遇到了这个问题** Please tell me who you are. Run git config --global user.email ...

  5. 两个常见Qt编译错误的解决

    作者:朱金灿 来源:http://blog.csdn.net/clever101 如果在电脑上安装了两个Qt版本,在编译一个工程时有可能出现如下的编译错误: ERROR: failed to refr ...

  6. Git上手:四种常见的Git协同工作方式

    1.集中式工作流 适用人群:开发小团队(4-5人),习惯使用SVN工具的小团队. 工作方式:团队组长创建远程仓库,创建一个master分支,组员可读可写. 每个开发人员都git clone远程仓库到本 ...

  7. 【Git初探】Git中fatal: Not a git repository (or any of the parent directories): .git错误的解决办法

    今天用git bash更新项目时遇到了无论使用什么命令都会报fatal: Not a git repository (or any of the parent directories): .git的情 ...

  8. 在JavaScript种遇到这样的错误如何解决XML 解析错误:格式不佳 位置:http:/... 行 27,列 32:

    相信很多人在开发的过程中都会遇到在js中解析xml文档的问题.有时候文档解析失败,但就是不知道怎么失败的,哪里格式不对.这里教大家一个方法来排查JavaScript解析xml文档格式出错的办法. 1. ...

  9. ADB几种常见的错误及解决方法

    下面列举出几种常见的错误及解决方法. Q1:无效的安装包,安装包已损坏[INSTALL_FAILED_INVALID_APK] A1:请检查安装包是否完整.如果是xpk包,可以通过 手动安装xpk来检 ...

随机推荐

  1. day16--HTML、CSS、JavaScript总结

        HTML 一大堆的标签:块级.行内 CSS position background text-align padding font-size background-image z-index ...

  2. BZOJ1073 [SCOI2007]kshort K短路,A*

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1073 题意概括 以距离为第一关键字,字典序为第二关键字,在所有的从S到T的路径中,选择不重复经过某 ...

  3. 015 在大数据中,关于mapreduce的粗略优化,以及mapreduce的处理过程解释

    使用的案例是wordcountmapreduce的程序演示 一: 1.源程序 2.优化的切入点 3.优化的部分代码 二:wordcount的处理过程 1.重点 一个块对应一个map任务. 而做单词统计 ...

  4. hdu 2005 求第几天(水题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2005 转载于:https://blog.csdn.net/tigerisland45/article/ ...

  5. POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)

    题目链接>>>>>> 题目大意: 给出一些字符串,问能否将这些字符串  按照 词语接龙,首尾相接  的规则 使得每个字符串出现一次 如果可以 按字典序输出这个字符串 ...

  6. 漫谈可视化Prefuse(六)

    可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合 ...

  7. 洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)

    题目链接 构建完MST后,枚举非树边(u,v,w),在树上u->v的路径中找一条权值最大的边(权为maxn),替换掉它 这样在 w=maxn 时显然不能满足严格次小.但是这个w可以替换掉树上严格 ...

  8. 潭州课堂25班:Ph201805201 爬虫基础 第十五课 js破解 二 (课堂笔记)

    PyExecJs使用 PyExecJS是Ruby的ExecJS移植到Python的一个执行JS代码的库. 安装 pip install PyExecJS 例子 >>> import ...

  9. 将python文件加入到python的环境变量中

    在python中,把一个python文件加入到python环境变量中,以方便其他python文件调用.有两种方式,下面对其进行简单的介绍 方式一: 导入系统自带的sys模块,然后将文件的路径进行追加或 ...

  10. asp.net c#并行调用service层代码

    public ActionResult Home(AdviserSearchModel model) { //顾问列表需要的当前城市的下级地区 var ip = "117.82.196.19 ...