文档章节

最常见的 Git 错误都有哪些,如何解决它们?

红薯
 红薯
发布于 07/30 23:29
字数 1291
阅读 6953
收藏 187
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

© 著作权归作者所有

红薯

红薯

粉丝 21762
博文 146
码字总数 64283
作品 8
深圳
产品经理
私信 提问
加载中

评论(21)

白云千嶂里
白云千嶂里
不错,总结的很好
WAng91An
WAng91An
作者您好,今天刷到这篇文章。受益匪浅哈,想转载一下到我的订阅号 Web项目聚集地 ,不知道您同不同意?我会在文章开头著名原文链接和作者,且不使用文章从事商业活动。
红薯
红薯 博主
可以的
SilverMissile
SilverMissile
git进阶之路
平波
这个懂的懂,不懂的还是不懂,这是我阅人无数的经验。😄
SilverMissile
SilverMissile
确实这样
善辰
一直用smartgit。
曾经蜡笔没有小新
曾经蜡笔没有小新
一直在用iterm2, 用zsh的git命令,简单快捷
分流砥柱
分流砥柱
里面落水的手机,必须转!
月夜筱风
月夜筱风
收藏从未停止
莫在全
莫在全
谁能解释一下~的含义
atompi
atompi
往前退一个 commit
码农小胖哥
码农小胖哥
我开始进来一看 这文章不错 然后一看作者 好吧 这文章肯定不是他写的
6种常见的Git错误以及解决的办法

我们都会犯错误,尤其是在使用像Git这样复杂的东西时。如果你是Git的新手,可以学习如何在命令行上开始使用Git。下面介绍如何解决六个最常见的Git错误。 Photo by Pawel Janiak on Unsplash ...

M104
2018/08/19
0
0
GitHub、GitLab与BitBucket应该怎么选?

  【IT168 评论】代码存储库一直都是程序员的好帮手,尤其是在大型团队协作工作时,但是如何选择适当的代码存储库主机却让很多程序员感到困惑。如今,代码存储库多种多样,本文选取了三大主...

it168网站
2017/10/26
0
0
稍微有点难度的10道java面试题,你会几道?

1、jvm对频繁调用的方法做了哪些优化? 2、常见的攻击手段有哪些?如何防范? 3、restful api有哪些设计原则? 4、hessian是做什么用的?它的传输单位是什么? 5、http中的post、get有什么区...

java技术栈
2017/08/13
0
0
「我们为什么要雇佣你」初创公司这个问题的真正意思是什么

简评:如何面对创业公司面试官提出的非技术问题,本文将给你一个专业的指导 虽然白板面试可能会因为某些原因变得不切实际,但它们并不具欺骗性,即使是很难的 Leetcode 练习,也不必猜测面试...

极小光
2018/12/10
0
0
七个你无法忽视的Git使用技巧

与其他技术相比,Git应该拯救了更多开发人员的饭碗。只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误。 尽管这...

oschina
2015/11/27
22.7K
24

没有更多内容

加载失败,请刷新页面

加载更多

BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
20分钟前
4
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
4
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
5
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
5
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部