最常见的 Git 错误都有哪些,如何解决它们?
如果您曾经与许多开发者一起开发一个大项目,那么使用 Git 作为版本控制是一个最好的选择。 不过 Git 很复杂,使用过程中经常会犯各种错误。 在本文中,我将讨论程序员在使用Git时所犯的一些常见错误以及如何解决它们。
拼写错误的最后提交消息
经过几个小时的编码后,您的提交消息可能存在很多拼写错误,好在有一个简单的解决方案:
git commit --amend
该命令将打开您的编辑器,并允许您更改最后一次提交消息。 因为可能没人会注意到你写的 “Initial commment” 有三个 m。
拼写错误的分支名
假设已经是下午三点了,但是你还没有吃午饭。饥肠辘辘的你可能直接就用 feature-brunch 作为你的分支名了,哇塞,好美味啊。可是很明显你写错了,应该是 feature-branch 。所以你可以使用 mv 命令类似重命名文件的方式重命名此分支:将其移动到具有正确名称的新位置。
如:
git branch -m feature-brunch feature-branch
但如果您已推送此分支,则需要执行几个额外步骤。 我们需要从远程删除旧分支并推送新分支:
git push origin --delete feature-brunch git push origin feature-branch
不小心将所有更改提交到主分支
你可能正在开发一项新功能,由于太仓促,你忘记为它打开一个新的分支。 这时候已经提交了大量文件,而且这些提交都位于主分支上。
现在我们需要使用以下三个命令将所有这些更改回滚到新分支:
注意:确保先提交或存储更改,否则一切都将丢失!
git branch feature-branch git reset HEAD~ --hard git checkout feature-branch
这将创建一个新分支,然后将主分支回滚到您进行更改之前的位置,然后最终检出您之前所有更改完整的新分支。
忘了将文件添加到最后一次提交
另一个常见的 Git 陷阱是过早提交。你可能错过了一个文件,忘了保存它,或者需要对最后一次提交做一个小改动。 这时候 --amend 再次成为你的朋友。
添加忘掉的文件,然后运行该此靠谱命令:
git add missed-file.txt git commit --amend
此时,您可以修改提交消息,也可以只保存它以使其保持不变。
将错误的文件添加到仓库
但是如果你做的恰恰相反呢? 如果您添加了一个不想提交的文件,该怎么办? 一个流氓ENV文件,一个构建目录,一个你不小心保存到错误文件夹的狗的图片? 这一切都是可以解决的。
如果您所做的只是暂存文件但尚未提交,那就像重置该暂存文件一样简单:
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
上述命令将撤消提交,删除图像,然后在其位置添加新提交。
天啊,我又干蠢事了!
这个命令适用于一切都出错的地方。 当您从Stack Overflow中复制粘贴太多解决方案时,您的repo处于比开始时更糟糕的状态。
git reflog 显示了您已完成的所有事情的列表。 然后它允许你使用Git的神奇时间旅行技能回到过去的任何一点。 但是你不应该轻易使用。
要获取此列表,请键入:
git reflog
我们所做的每一个动作,Git 都记录下来。下面是执行该命令的输出示例:
3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/feature-brunch to refs/heads/feature-branch 3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to feature-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技巧吗? 欢迎分享!
本文翻译自 Medium
想体验 Git 服务请访问 gitee.com
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
玩转mybatis中的类型转换
1.场景 日常java开发中经常有这种需求,用0或者1这些代码(不局限于数字)来表示某种状态。比如用0表示女性,用1来表示男性。而且写入数据库可能是一个标识,从数据库读取又还原为具体的说明。而且一般情况下为了更好理解或者消除魔法值,通常的处理方案是定义一个枚举: 有些枚举是这样定义的 public enum GenderType{ FEMALE,MALE,UNKNOWN } 那么通常很多人会这么入库(java伪代码) if(GenderType.MALE){ // 写入 1 }else if(GenderType.FEMALE){ // 写入 0 }else{ //也可能是泰国回来的 那就 2 } 读取的时候要么同样按照上面的再反向处理一次或者使用数据库sql语法case when 来直接写入DTO CASE gender WHEN 1 THEN '男' WHEN 0 THEN '女' ELSE '未知' END 这种处理方式看起来不是很优雅。而且多了很多的判断和处理逻辑,和我们的业务并不是非常相关。所以我们可以选择更好的处理方式。 2.Mybatis中的TypeHandler 如果你...
- 下一篇
Keepalived+LVS+nginx搭建nginx高可用集群
nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不足的情况下,应用服务器可以通过加机器的方式扩展流量。此时,对于一些特大型的网站,性能的瓶颈就来自于nginx了,因为单机的nginx的并发能力是有上限的,而nginx本身是不支持集群模式的,因而此时对nginx的横向扩展就显得尤为重要。 keepalived是一款服务器状态检测和故障切换的工具。在其配置文件中,可以配置主备服务器和该服务器的状态检测请求。也就是说keepalived可以根据配置的请求,在提供服务期间不断向指定服务器发送请求,如果该请求返回的状态码是200,则表示该服务器状态是正常的,如果不正常,那么keepalived就会将该服务器给下线掉,然后将备用服务器设置为上线状态。 lvs是一款用于四层负载均衡的工具。所谓的四层负载均衡,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境