查看原文
其他

【246期】Git 常用命令,每条都很重要!

Java精选 2022-08-09

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方有惊喜,留言必回,有问必答!

每天 08:15 更新文章,每天进步一点点...

这篇文章系统性的总结下 git 常见命令的使用方法。

1. 背景需求

今年以来帮助实验室的博士生做了两篇论文的实验。做paper的实验有一个特点:需求会经常变动,经常是这种方法效果不行,那就需要换另外一种方法进行试验。导致的结果就是代码会经常变动,并且这次改动之后以后还有可能需要改动回来,因为一直没有用上git,所以就显得代码非常混乱。

最后非常尴尬的局面就是:今天需要尝试下这个方法能不能work,需要将整个项目的代码过一遍,保证当前的代码、当前需要执行的程序、当前的参数是和这个需求符合的;明天可能又换了一种方法;后来又需要重新切换会第一天的方法,又得整个把代码给过一遍,将一些注释给重新注释回来,反正就是非常非常麻烦,人工一遍一遍进行代码控制非常累。

但是在实验过程中间又不想去使用新的技术,即使使用git是一件非常直觉的事情,知道 deadline 也没有用git来管理项目代码……

paper投出去之后,就觉得将git使用熟练真的太太太重要了。

2. 常见命令使用方法

创建一个 git 仓库

手下,我们可以在github上面找到任意一个repository,在本地git clone下来(注意,不是下载github上面的.zip压缩包),那么这个项目对应的文件夹本身就是一个git repository。

推荐下自己做的 Spring boot 的实战项目:

https://gitee.com/yoodb/jing-xuan‍

如果我们从零开始创建git仓库,也很简单,先新建一个文件夹,进入文件夹,然后:

git init  

就会在当前文件夹下面生成.git文件夹,默认是不可见的。这个.git就是用来存储我们对目录文件的所有操作历史的。另外,公众号Java精选,回复java面试,获取最新面试题资料,支持在线随时随地刷题。

git add & git commit

这里首先需要解释下 git 的工作原理,如下图所示:

当我们使用git add xxx.txt命令时,当前对xxx.txt的修改将会被提交到staging area;接着当我们继续使用git commit -m "message"时,这个修改才会被提交到 repository。

  • add 单个文件:
git add xxx.txt # xxx.txt 是文件名  
  • add 多个文件
git add * # or git add .  

git commit 时必须要带入提交信息(commit message):

git commit -m "your message about this commit"  

git status & git diff

要查看当前 repository 的状态:

git status  

如果要查看某个文件前后两次修改的差异:

git diff xxx.txt  

git log & git reflog

查看我们 commit 的历史,可以:

git log  

因为 git log 输出的信息很多,如果只想要简洁的输出,可以:

git log --pretty=oneline  

假设我们现在有这样一串提交历史:

a1 -> a2 -> a3 -> a4 -> a5  

我们从a5回退到a3,这时候使用git log将只能查看到a1 a2 a3 这3次的提交历史,a4 a5的提交历史是查看不到的。这时候,如果我们改变主意,又想从a3回到a5该怎么办呢,就可以使用:

git reflog  

可以查看所有的提交历史记录。我们只需要知道我们在a5时的commit message然后找到对应commit id,就可以回退到a5

推荐下自己做的 Spring Cloud 的实战项目:

https://gitee.com/yoodb/jingxuan-springcloud

下面具体讲怎么进行版本回退或者版本切换。

git reset

和之前一样,假如我们有下面这一串commit的历史,我们希望从a5回退到a3

a1 -> a2 -> a3 -> a4 -> a5  

首先在a5我们输入git log查看a3对应的commit id,是一段很长的字母数字序列,假设前 4 位是ab42,并且在所有的commit id里面是唯一的(方便我们做简写)。

接着执行:

git reset --hard ab42 # commit id 不用写全,写明能够标识该 commit id 的前几位即可  

我们还有更方便的方法,可以不用知道commit id :

git reset --hard HEAD^^  

其中HEAD^^标识我们切换会上上一个版本。如果指向切换为上一个版本,也就是a4,那可以:

git reset --hard HEAD^  

作者:Juntao Tan

https://tanjuntao.github.io/

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!
------ THE END ------

精品资料,超赞福利!


3000+ 道面试题在线刷,最新、最全 Java 面试题!

期往精选  点击标题可跳转

【238期】Java 8 中 Lambda 实现原理及源码剖析!

【239期】面试官问:你觉得 ThreadLocalRandom 这玩意安全吗?

【240期】面试官问:说说基于 Redis 实现延时队列服务?

【241期】面试官问:有了 for 循环 为什么还要 forEach?

【242期】Redis 过滤请求绝技 — 布隆过滤器与布谷鸟过滤器

【243期】面试官问:如何设计 API 返回码(错误码)?

【244期】MySQL 中的反斜杠 \\,太坑了!!

【245期】面试官:同类中两个方法加同步锁,多个线程支持同时访问这两个方法吗?

技术交流群!

最近有很多人问,有没有读者&异性交流群,你懂的!想知道如何加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群”,即可免费加入交流群!

文章有帮助的话,在看,转发吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存