git的用法总结

最近实习的项目需要提交一份到公司的代码仓库,在公司老员工的督促下速成了下git的用法,深深体会到git工具的强大,个人感觉git学习难度不大,但是很有用,git也算是当代程序员的必备技能。
一:Git是什么?
Git是目前世界上最先进的分布式版本控制系统
在这里插入图片描述
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
从上图可以看出Git从概念上分为3个大的区域,分别是工作空间、本地仓库和远程仓库。另外还有一个暂存区域,也称为索引区。下面我们看一下各个区域是做什么的。体现Git是分布式版本控制的关键点是它具备一个本地仓库,其实平时的版本控制工作都是在本地库操作,如果不涉及团队协作或者备份,甚至可以只使用本地库即可。
• 工作空间:其实就是我们在操作系统上的工作目录。我们能够通过操作系统的文件管理命令进行查看(例如在Linux上通过ls命令)。
• 本地仓库:工作空间有一个隐藏目录.git,这个目录及其内容并不隶属工作空间,而是Git的本地仓库。它是用来实现版本控制的。
• 远程仓库: 远程仓库是存储在远程服务器上的仓库,主要实现多用户的协同。
• 暂存区: 暂存区一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
二:SVN与Git的最主要的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
三:操作
1. 通过命令 git init 把这个目录变成git可以管理的仓库(git init)
完成本地仓库的创建之后,我们可以看到在目录下多出一个.git的隐藏目录,Git就是通过这个目录里面的内容实现版本控制的。
在这里插入图片描述
2.查看状态 (git status)
创建完成本地仓库之后就可以查看工作区的状态了。通过git status命令可以查看工作空间的状态(也就是文件的被管理情况)。

3.添加文件(git add)
经过上面的操作其实我们已经有了一个本地仓库了,但是本地仓库内部并没有管理任何内容。我们这一步做的就是让他管理一个文件。
在这里插入图片描述
4.提交文件(git commit)
提交文件其实就是将文件提交到本地库,也就是开始进行真正的版本管理了。具体可以通过执行如下命令,其后面的-m选项表示该次提交的注释内容。
在这里插入图片描述
完成提价后会有相应的返回,上图显示有一个文件更改,一个文件插入。完成提交后,我们可以在看一下这个工作空间的状态。可以看到此时工作空间的内容已经与本地仓库完全一致。
5.查看提交日志(git log)
完成提交之后,在本地仓库已经有了我们刚才提交的内容。也就是说现在本地仓库已经对我们的内容进行版本控制了。那么,我们怎么知道已经做了哪些提交呢?这个时候git log命令就派上用场了。运行git log,可以查看提交的日志。
在这里插入图片描述
6.查看提交详情(git show)
如果我们想看一下提交的详细内容又该怎么办呢?通过git show命令可以查看某一次提交的详细内容。以上次提交为例:
在这里插入图片描述
上图可以看到提交的详细内容,除了上一个命令所涉及的简要信息外,还包括具体修改的那个文件,哪一行,以及具体修改的内容等等。
7.查看工作空间修改情况(git diff)
我们在本地进行修改后,有的时候想了解当前工作区的内容作了哪些修改,这个时候可以使用git diff命令进行查看。
执行该命令是查看工作空间与暂存区的差异情况。比如我们在test.md文件中增加一行,此时执行git diff命令,如图深绿色的部分就是我们新加的内容。
在这里插入图片描述
但是如果我们把这个文件加入暂存区,然后在执行相同的命令,这时我们将看不到任何差异提示。
在这里插入图片描述
8.恢复到某个点(git reset)
在修改代码的时候经常会出现改了很多代码导致程序无法正常运行的情况,这个时候想回退到某个版本,然后把修改的代码慢慢加进去。Git提供了git reset命令来解决代码回退的问题。比如我们对刚才添加的代码不满意,想通过Git命令回退到之前的版本。这是需要找到期望回退版本的commit id,然后执行如下命令。
git reset 886f9ce13ca2ebca54af859f06e779685c407b91
在这里插入图片描述
9.创建分支(git branch)
首先介绍一下什么是分支,分支( branches ) 是指在开发主线中分离出来,做进一步开发(比如新特性)而不影响到原来主线。实际上在我们创建完本地仓库时,就已经有一个_分支_了,只不过这个分支是主分支,也叫主线(master)。如图所示,在实际应用中除了主分支外还会有其它分支,比如dev分支用于开发新特性。当完成新特性开发后,将代码统一合并到主分支中。
在这里插入图片描述
我们先了解一下我们工作空间的分支情况,通过命令git branch -l可以看到本地分支。在我们的测试环境运行该命令可以看到当前以及存在的分支。
在这里插入图片描述
我们前面提交的内容都是直接提交到主线的。如果我们开发一个新的特性,直接提交到主线在人多的情况下会非常乱。因此我们可以创建一个分支,等特性开发完成后再合并到主线。执行git branch命令可以创建一个新的分支。
在这里插入图片描述
如果仔细观察就会发现,此时master分支的颜色是绿色的,而且前面有个*,这说明当前工作空间仍然在master分支。
10.切换分支(git checkout)
通过git checkout命令可以将工作空间切换到新创建的分支。执行该命令进行分支切换,然后通过git branch -l可以看到发生的变化,此时branch0分支变成了绿色。
在这里插入图片描述
切换分支以后,再提交的代码就位于新的分支。需要注意的是,如果在分支做了一些修改,但还没有提交,这时切换分支会丢失已经做得的修改,因此切换之前需要提交代码。
11.合并分支(git merge)
假设我们在branch0分支已经添加了一些内容,并进行了提交。此时我们想将这些内容合并到主分支中。合并的方法就是先切换到主分支,然后执行git merge命令。
在这里插入图片描述
12.添加远程库(git remote add)
其实我们前面玩了半天,都是在本地玩的,压根没有涉及Git服务器的任何事情。如果要多人协同肯定要涉及到一个服务节点,这个服务节点其实类似于中转站的概念,跟SVN服务有着本质的区别。前面说了我们以github为例进行介绍。假设我们在github上已经有了一个空的远程库(假设远程库路径为https://github.com/xxx/test.git),此时远程库没有任何内容。此时我们可以通过git remote add命令添加远程库。

git remote add origin https://github.com/xxx/test.git

添加远程库后,其实并没有对远程库做任何事情,远程库还是空的。这里只是添加了本地仓库与远程仓库的关联关系。其中origin是远程仓库的一个代名词,可以使用其它任何名称,这里只是惯用法而已。
13.本地推送到远程(git push)
添加完关联关系之后,我们就可以将本地仓库推送到远程服务器上,例如我们将本地的master分支推送到github上,执行如下命令,过程中需要我们输入github上注册的用户名及对应的密码。
在这里插入图片描述
完成该操作后,可以登录github看一下远程仓库的情况。可以看到在github上的远程仓库已经具备了一个master分支,且包含与本地仓库一样的内容。
在这里插入图片描述
除了第一次向远程仓库推送内容外,我们后面修改代码后想向远程仓库提交代码使用的也是这个命令。默认情况下,git会将代码推送到与本地分支同名的远程分支。
我们提交代码的一般流程是这样的:添加到暂存区(git add),提交到本地仓库(git commit),最后推送到远程仓库(git push)
14.克隆远程仓库(git clone)
克隆命令可以将远程仓库的内容克隆一份,生成一个一模一样的本地仓库,同时会生成工作空间的内容。需要知道的是,默认情况下工作空间的内容是master分支的内容,如果需要其他分支,则需要创建本地分支,并且进行切换。例如我们从测试用的github上克隆上文推送的代码,假如我们克隆到一个新的文件夹gittest1,执行如下命令后,可以看到克隆后gittest1下面已经具有master分支的内容。
在这里插入图片描述
15.下载远程仓库的更新(git fetch/pull)
在多人协同的情况下,会不断的有人向远程仓库提交新内容。为了保证代码的同步,我们需要将远程代码拉到本地,git有2个命令可以将远程仓库的内容拉到本地,一个是pull,可以将远程仓库的代码拉到本地仓库,同时合并到本地工作空间;另一个是fetch命令,这个命令只将远程仓库的内容更新到本地仓库。
执行git fetch命令可以将远程仓库的内容拉取到本地仓库,但并不会更新本地工作空间。如图所示,我们将gittest中文件添加一行(a5),然后同步到远程仓库。然后切换到目录gittest1,并通过git fetch命令拉取远程仓库的内容。可以看到gittest1中test.md文件中的内容并没有变化。然后我们再执行git merge命令,该命令会将本地仓库相同分支的内容更新到工作空间,此时再查看文件内容,已经更新为最新的内容。
在这里插入图片描述
在这里插入图片描述
使用git pull命令可以直接将文件内容更新到工作空间
在这里插入图片描述
16.git 子模块(git submodule)
工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景。比如,在项目中引用第三方库。或者在模块化开发中,某些公共的模块是需要单独维护的,使用单独的仓库比较方便,但是在项目中需要引用,就会出现这样的场景。这里使用 Git 的 git submodule 命令为一个 git 项目 添加 子git项目。
通过git submodule add 远程仓库地址可以给自己的仓库添加子模块
在这里插入图片描述
新的 .gitmodules 文件保存了项目 URL 与已经拉取的本地目录之间的映射。
在这里插入图片描述
通过git status 查看git 状态
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值