Git常用命令

1 初始化Git仓库

Git说白了就是一个版本仓库,每个版本都关联本地磁盘中具体的文件,那么如何将文件关联到仓库中呢。

(1)首先先进入本地磁盘文件目录

 (2)先使用git 仓库状态命令查看仓库情况

发现当前目录还不是git仓库

(3)执行git仓库初始化命令

Git  init 

 

(4)查看仓库状态 

 仓库中状态正常,没有任何文件

2 仓库文件管理初体验

(1)执行touch命令创建一个java文件

(2)查看新增文件的状态

Git status

 

 发现文件颜色是红色,且提示文件未被追踪,这里我们可以联想到之前讲git 仓库结构的时候有三个结构,分别是工作树,暂存区,目录,而这里TestGit.java文件就是还处于工作树中,根据提示可以知道,需要使用git add 命令将文件加入到暂存区。

(3)将文件加入暂存区

Git add TestGit.java

执行完命令后没有任何提示,没关系,我们使用git status查看下仓库中文件的状态

发现文件颜色有点绿,这里也意味着文件已经加入暂存区,根据提示我们可以知道可以通过git rm --calched 具体文件将文件从暂存区还原到工作树,这里就不操作了,大家有兴趣可以执行试试,然后查看文件状态是否还原。

(4)文件加加入git目录

Git commit -m”备注信息”

 

查看文件状态

 

 发现工作树中已经非常干净,都已经加入到git 目录当中,到这里我们已经初次完成了一个文件是怎么加入git 仓库的,过程分别是从工作树-暂存区-目录,对应的状态变化如下:

这上面涉及到了如下命令

Git add file 将文件加入暂存区
Git commit -m”commit memo” 将文件加入git 目录
Git status查看文件在仓库中的状态

 这里额外输出一个偷懒命令,因为每次对文件的操作都是从工作树-暂存区-目录,略显麻烦,如果想偷懒直接从工作树-目录,可以使用这个命令,这里需要特别注意,这个命令只针对之前已经加入过暂存区的文件有效,什么意思呢,如果是新增的文件,之前未执行过git add 命令加入暂存区,那么是无效的

Git commit -am”备注信息”

 比如,我们先使用vi TestGit.java修改之前已经加入过暂存区的TestGit.java文件

 

然后执行git commit -am”跳过暂存区”看下效果 

 

发现修改内容直接提交到了目录。

我们再尝试一下新增文件是否有效

新建一个Temp.java文件

 执行git commit -am”提交测试”

 发现无法commit,所以偷懒命令的使用是有范围的。

3 查看提交历史

最原始的历史提交查看命令是git log

为什么说原始,就是因为信息太多,不方便阅览

简化高效版命令,也是工作中推荐使用的是下面这个组合命令

Git log --oneline --graph

 

 

--oneline 是多个命令--pretty=oneline --abbrev-commit的缩写,这个命令不仅简化了历史版本的信息输出,同时将SHA-1的散列值也简化成了前8位,方便查看版本信息和对比,在工作中使用这个命令可以解决大多数问题,而--graph则是视图优化,以ASCII 图表来显示分支和合并历史。

因为还没讲到分支合并,这里我们只进行命令演示

4 撤销操作 

在前面已经提到了三个区域,分别是工作树,暂存区,目录,其分别对应了不同的git命令,git add/git commit 来完成文件在区域中的移动,既然有前进,那么就一定有后退,那么怎么将修改文件还原,怎么将提交到暂存区的文件退回工作目录呢?

(1)取消已经修改的内容

当我们在工作树当中修改了某个文件,但是后面想还原成修改之前的内容,可以通过git checkout -- 文件名来完成,如下,我们在工作树当中修改Temp.java文件

 

然后我们发现修改的内容不对,不想要了,想还原成修改之前的内容,

执行git checkout -- Test.java

 

发现内容已经还原

(2)取消已经提交到暂存区的内容

当我们把文件修改完并且已经提交到暂存区,但是发现内容需要再进行调整,可以通过git reset head 文件名完成

我们可以先在Temp.java文件当中修改内容并提交到暂存区

 

然后执行git reset head Temp.java完成暂存区回退

 

这个时候可以发现,文件已经回到工作树修改的内容,完成回退

5 git分支 

什么是分支,在日常研发流程当中,代码不是从0到1的过程,而是基于现有代码进行编辑,那么现有代码我们可以看成一个基础分支,如果这个时候来了A和B两个需求,分别都要对基础分支进行修改,那么就可以基于基础分支,分别拉出两条开发分支

 (1)创建分支

 基于master分支创建一条开发分支rel_A

Git checkout -b rel_A

可以发现我们的分支名已经发生了变化,从master变成了rel_A

(2)切换分支

如果这个时候我们又想回到master分支,怎么办呢?

可以通过git checkout master命令来进行切换

 这个时候发现分支已经切换回来了

(3)分支合并

当我们开发分支完成变更后,往往需要进行代码合并,因为很有可能是和团队一起进行的迭代开发,这里面就需要所有参与者将代码合并到一个分支当中,形成完整的功能代码,那么怎么合并呢,这里说一下命令,但是在实际工作当中不常用,一般使用图形化工具

首先我们通过git checkout rel_A回到开发分支,然后进行修改并提交

然后切换回master分支,进行代码合并,查看合并结果 

 

发现在分支rel_A添加的内容在master中已经存在了,说明我们已经将分支合并到master

(4) 合并冲突解决

在多人合作开发场景下,代码冲突是无法避免的事情,发生的原因很简单,就是大家对同一个代码进行了修改,然后在合并的时候git不知道采用哪一个修改,也就是出现冲突,需要人为的解决,下面使用命令行进行演示,实际开发过程中使用图形化工具要方便得多

首先,我们分别从master分支切换出两个开发分支dev_A和dev_B,然后分别对Temp.java文件进行编辑,最后再将两个分支合并进入master,看看会有什么效果。

先拉分支dev_A,并修改文件

 

再拉分支dev_B,并修改文件

 

 

最后,我们切换回master,并分别将dev_A和dev_B合并到master分支

先合并dev_A

发现没有任何问题,合并成功,再合并dev_B试试

 

合并失败,出现冲突,怎么解决这个问题呢

进入Temp.java文件的编辑界面,发现出现了master分支和dev_B分支冲突的内容

要解决冲突,首先需要知道我们需要那个版本的代码,如果是维持master代码,我们只需要将dev_B的代码删除就好,当然,这里面的分隔符>>>>>也要删除,如果都需要,也可以都保留,看实际需要,这里我们都保留,进行编辑并保存

 

保存后,查看状态

发现还是处于conflicts,不着急,我们进行提交即可

 

通过查看状态,发现冲突已经解决,到此,文件完成合并

(6) 删除分支

Git branch -d 分支名

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值