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

2023-12-24 15:58

本文主要是介绍收好这份 Git 命令应急手册,关键时刻可保你一命,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天跟大家分享一个比较有意思的网站 - 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


点击「阅读原文」可查看文章原内容。

GitHubDaily - 挖掘开源的价值。

  • 微博: @GitHubDaily

  • 知乎:GitHubDaily

这篇关于收好这份 Git 命令应急手册,关键时刻可保你一命的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532326

相关文章

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

linux打包解压命令方式

《linux打包解压命令方式》文章介绍了Linux系统中常用的打包和解压命令,包括tar和zip,使用tar命令可以创建和解压tar格式的归档文件,使用zip命令可以创建和解压zip格式的压缩文件,每... 目录Lijavascriptnux 打包和解压命令打包命令解压命令总结linux 打包和解压命令打

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复