GIT的基础用法

什么是GIT

git是一种版本控制系统,通俗来讲,就是帮我们把文件备份。但git版本控制系统的功能远不止备份这么简单,总的来说它具有如下特点:

  • 文件缓存
  • 记录历史
  • 在缓存之间随时“穿越”
  • 多端共享
  • 团队协作

GIT并不是唯一的版本控制系统,除了GIT之外,常用的版本控制管理系统还有SVN,鉴于他们实现机制的不一样,通常我们称GIT为分布式版本管理系统,SVN是集中式版本管理系统。
那么分布式和集中式版本控制系统有什么不一样呢?

  1. 集中式的需要一台中央服务器,所有的代码管理,都交给中央服务器进行管理,一旦中央服务器挂了,就会影响所有的用户
  2. 分布式版本控制系统下的每一个节点,都可以充当服务器,每个节点自主管理存放在本节点上的文件。
  3. GIT比SVN的读取速度更快

git的工作是分区的,通过调用git相关的命令,我们在每个区可以切换,git常有三种区,分别是:

  • 工作区
  • 暂存区/过渡期
  • 历史区

工作区就是我们本地电脑工作中使用的那部分代码,当我们使用命令git add命令把代码添加之后,我们的代码就提交到暂存区了,使用了git commit 命令,我们的代码就提交到历史区了。

相关Linux命令

1、打印当前文件目录

pwd

2、查看git配置

git config --list

3、配置全局的用户信息

git config --globle user.name "mmcai"
git config --globle user.email "xx@126.com"

4、配置当前目录下git的用户信息

git config user.name "mmcai"
git config user.email "xxx@126.com"

5、初始化git——告诉那个文件夹被git所管理

git init

6、递归强制删除文件夹

rm -rf xxx
-r 递归
-f 强制

7、其他

cd 切换文件目录
mkdir 在指定目录下创建文件夹
touch 在指定文件目录下创建文件
cat 查看文件内容
ls -al 显示当前目录下所有的文件内容

8、vi 编辑相关命令

vi <文件名>
i/u 切换到编辑模式
dd 删除当前行

ESC 退出编辑模式
:wq 保存文件并退出
:q! 强制退出

9、直接把工作区的内容提交到历史区

git commit -a -m '注释'
前提条件是,你必须使用git add 命令操作过一次

提交到历史区

上面我们说到GIT系统当中有三个区:工作区,暂存区,历史区,我们不能跨区操作,必须先把文件添加到暂存区之后,才能提交到历史区。如果把代码从工作区提交到暂存区,或者把暂存区的内容提交到历史区,代码只是copy了一份存到另外的空间,当前(工作区)当中的内容,不会发生变化。

工作区

当我们使用git init 命令行支行,我们当前就处在工作区

git init

暂存区

在工作区下,我们执行如下命令,就把我们当前的文件,提交到了暂存区

git add ./-A

既然能添加,当然也能删除暂存区,使用如下命令,我们可以删除暂存区里面的内容

git rm --cached 文件名

历史区

使用命令git commit 就把文件从暂存区

git commit -m '描述你此次提交到历史区做的修改'
-m 参数不能省略,必须填写

日志

查看git提交到历史区的历史状态,最新提交的内容在日志的最上面展示

git log 

状态

查看当前git所在那个区?工作区,暂存区,历史区

git status

文件比较

通常为了查看每个区的内容有何不同,我们可以通过git diff命令来实现,我们上面知道,git有三个区,所以比较的情况也会分为几种情况:

  1. 工作区和暂存区比较
  2. 工作区和历史区比较
  3. 暂存区和历史区比较
git diff 工作区和暂存区比较
git diff <master> 工作区和历史区比较
gif diff --cached 工作区和暂存区比较

撤销

当我们工作区的代码,不小心或者写的比较不理想的情况下,我们想把本次修改的内容进行撤销的时候,GIT可以帮我实现。撤销分几种情况:
1、从暂存区回滚
2、如果暂存区也是需要回滚的,需要从上一层暂存区进行回滚
3、如果不小心提交到历史区,需要从上一层历史区中进行回滚

从暂存区回滚:

git checkout .

从暂存区的上一层进行回滚

git reset HEAD .
git checkout .

从历史区的上一层进行回滚

git reset --hard <版本号,版本号通过git log查看>
该操作会把工作区和暂存区全部覆盖

如果从历史区的上一层回滚之后,想再次回到之前的历史区怎么办?

git reflog 
查看全部日志,获取版本ID
git reset --hard <版本ID>
只要你知道版本ID,你就可以使用git reset 回滚到任何版本

.表示当前目录下的所有文件

分支

分支的使用通常会有以下几种情况:

  1. 线上有bug的时候
  2. 基于当前项目的另外一个有不同逻辑的项目copy
  3. 多人开发

查看分支

git branch

创建分支

git branch <分支名>

切换分支

git checkout <分支名>

创建并切换分支

git checkout -b <分支名>

删除分支

git branch -D <分支名>
删除分支时,用户不能在当前分支上

当您在一个分支下创建了新的文件时,如果没有把文件提交到历史区,所有的分支下都能看到该文件。同时当你在一个分支下对文件进行了修改之后,在你没有把它提交到暂存区或者历史区之前,你切换分支会提示不允许,这个时候可以通过如下命令实现切换

git stash 暂存文件

git stash pop 还原暂存文件

工作流程是:分支1(没有提交到暂存区或历史区)——> git stash 暂存文件——>分支2——>git stash pop——>分支1

分支合并
合并分支的时候,确保当前分支时主干,否则,就把主干合并到了其它分支上去了

git merge <分支名>

查看分支情况

git log --graph --online

远程仓库

虽然git是分布式的,但我们往往还是需要一个中央服务器,这个服务器的主要任务可以理解成是我们的代码仓库。这个仓库我们叫做远程仓库,通常我们用github或者国内的gitee。上面我们说git当中有三个区:工作区,暂存区,历史区。远程仓库只会保存我们历史区当中的内容,所以,你的代码git commit 命令之后,才能推送到远程仓库当中。

远程仓库配置

要想把代码提交到远程仓库,一般我们需要有远程仓库相关的账号,而且要设置相关的秘钥。

添加远程仓库

git remote add <origin(别名)> <url>

删除远程仓库

git remote rm <别名>

直接设置远程仓库

git remote set-url <别名> <url>

查看远程仓库地址

git remote -v

拉去线上代码

git pull

克隆远程仓库到本地

git clone <url>

推送到远程仓库

git push -u origin master 

-u 设置默认推送的主机,下次推送的时候,不用写仓库的名字,可以直接提交

gh-pages

在GitHub当中,我们创建一个gh-pages的分支,可以发布我们的静态页面,作为我们项目的一个介绍网站。
我们可以在github仓库的设置里面,找到GitHub Pages 主体,查看我们项目可被访问的web静态页面的url地址。

注意

  • 为了控制我们本地的代码,那些可以被提交,那些事需要忽略的,我们需要添加一个.gitignore
  • git不会上传空的文件夹,但我们可以再文件夹当中添加一个.gitkeep文件,把空文件夹提交上去
  • 好的项目,通常会给项目添加标签,说明我们项目当中使用了那些技术,或者是什么类型的
  • issue 如果对一个项目有问题,可以在这里给作者留言

代码fork-pull

github上面,看到一个比较不错的项目,想要copy到自己的仓库,可以通过fork的操作,把别人仓库里面的项目,克隆到自己远程仓库当中。当你觉得别人的代码写的不好的时候,可以通过pull requests 把你的代码提交到fork的项目当中。

结束

以上内容,算是我的学习笔记,初次之外,涉及到git的问题,可能还有很多,比如说想把一个项目同时提交到两个仓库(GitHub和gitee),解决冲突等,希望有机会我们能一起讨论讨论。

一台电脑,两个及多个git账号配置

    原文作者:mmcai
    原文地址: https://segmentfault.com/a/1190000019211184
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞