今天跟大家分享一个比较有意思的网站 - Oh shit, git!。

http://ohshitgit.com/

这个网站整理了一些 Git 新手在使用 Git 时常会遇到的各种突发状况,并贴心的给出了应对方案。

我大致瞄了一眼,文章里面提到的一些问题,大部分新手确实会经常遇到,所以我在这里简单的整理一下,把这些应对方案分享给大家。

你们可以把这篇文章马住或分享给同事,以备不时之需,毕竟不怕神对手,就怕猪队友~

下面切入正题,跟大家聊下在 Git 的使用过程中,经常会出现哪些问题,以及应该对应使用哪种解决方案。

注:为了使场景描述更加生动,因此加入了新手女神与高级舔狗两个角色来配合讲解 ????

女神:哎呀,刚刚有个地方搞错了,怎么重新来过呢?

女神莫慌,Git 的牛逼之处,在于它自带时光机效果,能让你在项目的历史代码中任意穿梭。

如果项目的某一处地方它自己不小心坏掉了,不妨试下下面的这行命令:

$ git reflog

这条命令能列出你在 Git 上的所有操作记录,你只要找到 HEAD@{index} 前面所对应的操作索引,并使用下面命令即可:

$ git reset HEAD@{index}

注:使用时需将HEAD@{index}替换为对应索引。

女神:想改个小东西,但代码不小心提交(commit)了,这可咋整?

这个简单,首先,添加下当前已改动的代码:

$ git add .

然后,运行下面这条命令,它就会把你刚刚添加的代码合并到最后一次提交上了:

$ git commit --amend

女神:哼!刚刚写的提交历史写得不够好,我想重写一下!

好的,还是上面提到过的那条代码,运行一下,就可以重写提交历史啦:

$ git commit --amend

女神:这下惨了,我刚刚不小心把新分支的代码提交到主分支上了!

女神别着急,我们一步步来,你先创建个新分支(some-new-branch-name):

$ git branch some-new-branch-name

然后把刚才的提交从主分支中移除:

$ git reset HEAD~ --hard

需要注意的是,上面的代码只会切换到最后一条提交记录上,如果你已跑到其它提交记录上怎么办?没关系,你可以用 git reset HEAD@{number} 再跑回来。

等你跑回来之后,我们再切换到新分支上:

$ git checkout some-new-branch-name

好了,完成啦,现在主分支干干净净,刚刚不小心提交的代码也被移到新分支上了。

需要注意的是,上面的代码只对本地仓库有效,如果你已经把代码提交到远程仓库上,那就得跟队友商量下解决方案了。

啥?我就是你队友?这可真让我受宠若惊☺️ 不过没事,等下我帮你在线上主分支上 reset 然后 push -f 一下就好啦~

女神:完蛋了,我把代码提交到错误的分支上了!

别怕别怕,有我在呢。

我们先撤销最后一次提交,但保留变更代码:

$ git reset HEAD~ --soft
$ git stash

再切到你想要提交的正确分支(name-of-the-correct-branch)上,并把变更代码提交上去:

$ git checkout name-of-the-correct-branch
$ git stash pop
$ git add .
$ git commit -m "your message here"

OK,到这里就搞定了。

如果想要逼格高点,也可以用 cherry-pick 这个命令来完成上面那些操作。具体的操作步骤如下。

首先,切换到正确的分支上:

$ git checkout name-of-the-correct-branch

然后使用 cherry-pick 来获取最新一条提交记录:

$ git cherry-pick master

最后再把主分支上那条提交错误的记录删除:

$ git checkout master
$ git reset HEAD~ —-hard

女神:咦?为啥我运行 diff 后啥都没有?

遇到这种情况,应该是文件没有加入到暂存区的缘故。解决方案很简单,咱们要么把文件加入到暂存区,要么就直接使用下面这条命令:

$ git diff --staged

这样,就可以看到未存入暂存区文件的 diff 效果啦。

女神:这项目怎么这么乱!好烦呐!我不玩了!

别气别气,别气坏了身子就不好了,么么哒 ????

如果本地代码仓库把自己折腾得乱七八糟,不用怕,用下面这招,一击必杀:

$ cd ..
$ sudo rm -r fucking-git-repo-dir
$ git clone https://some.github.url/fucking-git-repo-dir.git
$ cd fucking-git-repo-dir

是的,这就是备胎(线上仓库)的强大之处,只要你备胎尚在,你就可以大大方方的把本地仓库删了,clone 备胎,从头再来。

女神:好啦,我没什么问题了,谢谢你哦~

不不不,这块问题还多着呢?你打开下面这个网站,听我跟你细细道来…

https://stackoverflow.com/questions/tagged/git

收好这份 Git 命令应急手册,关键时刻可保你一命相关推荐

  1. 收好这份 Git 应急手册,关键时刻可保你一命

    关注 前端瓶子君,回复"交流" 加入我们一起学习,天天进步 作者 |  AllySu 来源 | imooc.com/article/20411 因为教程详细,所以行文有些长,新手边 ...

  2. 这份 Git 应急手册,关键时刻可保你一命

    点击上方"蓝色字体",选择"设为星标" 做积极向上的前端人! 作者 |  AllySu 来源 | imooc.com/article/20411 因为教程详细, ...

  3. 【干货整理】最近从 0 学习Git,详细分类总结了这份 Git 命令宝典

    虽然之前学过 Git,不过用的比较少,很多原理也不是很清楚,所以最近是买了个视频,静下心来从零学习了下 Git,不过 Git 用来用去其实也就那几个命令,今天这篇文章,我把那些命令都分类总结了一下(当 ...

  4. git 命令操作手册大全

    Desc: .git 是工作区的根目录,通过.git 定位版本库,shell 命令和 Linux 中一样.pull = fetch + merge,cat .git/config查看本地分支和远程分支 ...

  5. git merge 冲突_卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家好,我是小 G. 在座的各位应该都知道,Git 作为居家必备.团队协作之 ...

  6. Git命令全解析-前端备忘录

    git是一个优秀的版本控制工具,极大地提高了团队开发的效率,废话不多说,接下来上栗子: 一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态  git ...

  7. 常用git命令总结大全

    目录 一.常用命令 1.git init 2.git add 文件名 3.git commit -m "备注" 4.git status 与 git diff 5.git show ...

  8. Git常用命令学习手册

    注意: 学习前请先配置好Git客户端 相关文章:Git客户端图文详解如何安装配置GitHub操作流程攻略 官方中文手册:http://git-scm.com/book/zh GIT 学习手册简介 本站 ...

  9. Git版本控制软件结合GitHub从入门到精通常用命令学习手册

    GIT 学习手册简介 本站为 Git 学习参考手册.目的是为学习与记忆 Git 使用中最重要.最普遍的命令提供快速翻阅. 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以 ...

最新文章

  1. 为什么说 Python 内置函数并不是万能的?
  2. Revit二次开发示例:DeleteDimensions
  3. 积跬步,聚小流-------一个登录中的知识点
  4. 高并发系统之限流特技
  5. 并发编程——进程——进程的同步与数据共享
  6. java设计按月每天签到_java实现app签到功能
  7. 《时间序列分析及应用.R语言》第十一章阅读笔记
  8. ESP32开发 CMakeLists包含同级目录.h文件,error: gpioX.h: No such file or directory
  9. 万万没想到:从啤酒评分 app 中竟能找到情报人员和军人的敏感信息
  10. php mysql pdo出错_PHP / MySQL / PDO – 结果为false但没有DB错误消...
  11. “一个人会不会一直穷下去”“先看看他关注的公众号”
  12. Ant--基于java的build工具
  13. uniapp手机号码正则验证
  14. 模2除法怎么计算,模2除法最简单的理解
  15. 自然语言处理之分词、命名主体识别、词性、语法分析-stanfordcorenlp-NER(二)
  16. 【CEP 扩展开发二】Hello World
  17. 处理ThinkPad X12018按电源键无法开机的问题
  18. 游戏挂机运行脚本方法
  19. C语言开发打气球小游戏
  20. MapReduce程序中的万能输入FileInputFormat.addInputPaths

热门文章

  1. C#语言与面向对象技术(1)
  2. 【ACM】杭电OJ 2023
  3. java+script+当前日期_如何在JavaScript中获取当前日期?
  4. 想学Python?那这套教程再适合不过了!
  5. 京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈!
  6. “不会Linux,怎么干程序员?”骨灰级工程师:干啥都不行!
  7. AI一分钟 | 谷歌遭特朗普指责;程维、柳青道歉:顺风车业务无限期下线
  8. 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取
  9. 学术 | DeepMind最新研究:使用更简单的环境就能检测AI是否安全
  10. 阿里巴巴为什么不建议直接使用Async注解?