GIT管理及基础的Linux命令

Posted 珠峰培训

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIT管理及基础的Linux命令相关的知识,希望对你有一定的参考价值。

GIT基础知识

什么是git?

分布式版本控制系统,它是由Linux(全球比较大的服务器系统)创始人花两周时间使用C语言编写的工具(在GIT命令窗口中一般都是执行Linux命令)

什么是版本控制系统?
在没有版本控制系统之前,我们的操作可能向下面这样:
创建一个word文档,想要编写自己的年终总结,第一天写了一部分;第二天想接着写,但是发现还要把第一天的部分内容进行修改等,如果直接修改,原有的内容就丢失了,以后也找不到了;本质问题:后面修改的内容会替换原有的内容,原有的内容没有做保存,以后想找都找不到

版本控制系统的优势:
1、备份文件
2、记录历史
3、回到过去
4、多端共享
5、团队协作

常用的版本控制系统

git:分布式版本控制系统
svn:集中式版本控制系统

分布式和集中式的区别?

[集中式]

  • 想要做历史记录的查看或者备份,必须链接到中央服务器才可以(需要联网)

  • 处理的速度没有git快

[分布式]

  • 每个开发者本地都是一个单独的仓库,在自己的仓库中就可以完成历史版本的记录和查看(不需要联网)

  • git处理的速度更快(git是按照数据存储的)

其余还有一些区别,自己回去扩展

GIT管理及基础的Linux命令

Linux操作系统中常用的命令

  • ls 查看当前目录下的文件(或者文件夹)

    • -l 查看详细信息

    • -a 查看隐藏文件

    • -la 同时具备以上特定

  • clear 清屏

  • cd 目录切换

    • cd ../ 返回上级目录

    • cd ./ 返回当前目录

    • cd / 返回根目录

    • cd xxx 进入到指定文件夹

    • cd E: 进入到指定的磁盘

  • mkdir 创建文件夹

  • touch 创建一个空文件

    • 可以创建无文件名的文件,例如: touch .gitignore / touch .babelrc …

    • 在电脑隐藏文件后缀名的情况下,我们也不至于创建出1.txt.txt这样重复后缀名的文件

  • vi 向指定文件中插入内容 例如:vi 1.txt

    • 首先进入命令窗口模式

    • 我们先按 i ,进入到插入内容模式

    • 编辑需要写入的内容

    • 按ESC键,再按 : 键,再按 wq (保存并退出)

    • 再按 q! (强制退出,新输入的内容不保存)

  • echo xxx > 1.txt 把xxx内容放到1.txt文件中,如果没有这个文件则创建这个文件(新存放的内容会替换原有的内容)

  • echo xxx >> 1.txt 新的内容会追加到原有内容的后面

  • cat 查看文件中的内容

  • cp 拷贝文件

  • rm 删除文件

    • -r 递归删除(把当前文件夹中所有的后代元素也都遍历到删除)

    • -f 强制删除

    • -rf 一但rf后,没有办法还原回来,所以删除要慎重慎重慎重

Git的工作原理和流程

安装完成git后,我们最好先把一些基础信息配置一下(只需要配置一次即可)

$ git config -l 查看当前本机git的配置清单

相对比较重要的配置:user.name / user.email,每一次提交的时候我们需要知道谁提交的

$ git config —global user.name xxx
$ git config —global user.email xxx

设置的用户名和邮箱可以随便写,但是建议最好写 gitHub/Codding等平台的账号和邮箱

Git的工作流程

git是分布式版本控制系统,每一台客户端都是一个独立的git仓库(有git工作的全套机制)

一个git仓库分为三个区域:
1、工作区:平时写代码的地方
2、暂存区:把一些写好的代码暂时存储的地方
3、历史区:生成一个个版本记录的地方

创建GIT仓库

在指定目录中,执行 $ git init ,相当于以当前目录作为基础,创建了一个本地git仓库

创建完成后,会在项目的根目录中展示 .git 这个文件(隐藏文件):有这个.git文件的才叫做git仓库,没有则不能被称为git仓库(因为暂存区和历史区的内容都是存储在这个文件夹中的)

把工作区的内容提交到暂存区

$ git add xxx 把某个文件提交到暂存区
$ git add . 把所有修改的文件(修改和新增的包含,删除的不包含)
$ git add -u 把所有修改的文件(包含修改和删除的,但是不包含新增的)
$ git add -A 是点和U的结合体,所有修改、新增、删除的信息都会提交到暂存区 (但是真实效果中两者效果差不多,用哪个都可以)

$ git status 查看当前文件的状态
红色:在工作区中,还没有提交到暂存区
绿色:在暂存区中,还没有提交到历史区

如果在提交内容的时候,有些内容并不想提交,我们可以增加git提交的忽略文件:.gitignore(没有文件名只有后缀名)

//=>.gitignore中的信息
.idea   //=>使用WB打开项目或者编辑项目,自动会生成的文件
node_modules //=>使用npm安装模块的时候,当前安装在项目中的模块都在这个文件夹中(之所以也忽略提交是因为这里的内容太多了)
.DS_Store
...

把暂存区内容提交到历史区

$ git commit
$ git commit -m’xxx’

$ git commit -a -m’xxx’ 把提交到暂存区和提交到历史区的步骤合在一起完成

  • 这种方式只适合已经提交过至少一次的文件,被修改后,我们可以这样快速提交

  • 对于新增加的文件,一次都没有提交过,是不允许这样操作的

[root-commit] 根提交
简单理解为,第一次提交到历史区域;如果我们创建一个新的仓库,但是没有做过根提交,此时我们仓库中没有任何的分支(哪怕是master),也就不存在所谓的分支切换(当前仓库还不完整:一个工作流程走完一遍才算完整)

工作流中的一些细节知识

不管是从工作区提交到暂存区,还是从暂存区提交到历史区,每一个区域当前的内容是一直保存下来的,不会消失

$ git log / $ git reflog 都是查看历史提交记录(也相当于查看历史版本号),在没有历史版本回滚的时候,我们用哪个都可以,有历史版本回滚,git log只能查看当前回退版本以前的版本

$ git rm --cached . -r

可以把.替换为具体的文件名,从暂存区把所有内容(或者是你指定的具体文件)都撤回到工作区

  • 不管暂存区中的内容是否已经提交到历史版本上了

  • 也不管是你第几次放到暂存区的

统统撤回,这种方式太暴力了,我们用的很少

$ git checkout .

把暂存区内容撤回工作区(覆盖现有工作区中的内容,无法找回),也可以理解为:用上一个暂存区存储的内容覆盖现有工作区中的内容,工作区内容变为和上一个暂存区一样的内容,暂存区内容还在

问题:只能限制当前代码还没有提交的情况,当前代码没提交回滚的是上一次提交到暂存区的内容(和工作区内容不一样);如果当前这次也提交了,暂存区和工作区一样,回滚回来也是一样的,这个方式就解决不了;

此时需要我们:
1、在暂存区中,回滚到上一次暂存区中记录的内容(暂存区先回滚一次)
$ git reset HEAD .

2、把最新暂存区的信息回滚到工作区,替换工作区内容
$ git checkout .

$ git diff

工作区 VS 暂存区 : $ git diff
工作区 VS 历史区 : $ git diff master
暂存区 VS 历史区 : $ git diff —cached

查看不同区域之间代码的不同,我们一般都是基于可视化的页面来查看不一样的

最重要的一个回滚代码技巧:$ git reset --hard 版本号

$ git log 可以查看版本号

回滚时候指定的版本号不一定非常全,有的七八位即可

当我们回滚到某一个历史版本之后,暂存区和工作区的内容都将被这个版本内容所代替

团队协作开发下的git操作

前面讲的都是单独开发,在自己本地建立git仓库的一系列操作流程,团队协作开发之下,流程上还是有所区别的

1、创建中央仓库

一般是由团队技术LEADER或者指派的人完成的,仓库中默认是有一些初始化文件的

中央仓库可能在:gitHub、Coding、自己公司的git仓库服务平台、自己公司的服务器等…

[2]
作为LEADER,还需要把项目中一些基础的信息提交到远程仓库上

  • 在自己本地创建一个仓库,把一些基础内容都放在仓库中

  • 把新增加的信息提交到本地仓库历史区中

  • 让本地仓库和远程仓库保持关联

  • 把本地仓库历史区中的信息同步(推送)到远程仓库上

让本地历史区信息和远程仓库信息保持同步:
$ git push origin master 把本地推送到远程上
$ git pull origin master 把远程的拉取到本地
(origin 是我们本地和远程仓库关联的那个名字,master是远程仓库的主分支)

  • 相当于在本地创建了一个仓库

  • 也让本地这个仓库和远程仓库保持了连接(名字:origin)

  • 也罢远程仓库中现有的内容克隆到了本地

2、无分支模式下的团队协作

作为开发者每天来的第一件事情或者提交代码之前,都要先PULL一下

[如果远程仓库和本地仓库不是同一个文件同一行代码冲突]

  • git 会自动依赖于 Fast-forward 模式进行合并

  • 自动合并后,我们重新提交即可 git add / commit / push …

[同一个文件的同一行代码冲突]

  • 找到冲突的文件,留下自己想要的代码

  • 不管之前是否commit过,都要重新的commit,然后push即可

单独分支管理

1、每天第一件事情,就是创建一个dev分支,并且切换到这个分支上

2、正常的开发代码,把每天开发的任务都先提交到自己的分支上

3、提交到远程仓库上
=>把本地自己分支DEV中的内容,合并到本地自己的MASTER分支下
=>把自己本地创建的分支删除(可以不删除,但是有的公司不希望远程中出现分支,或者避免开发人员的分支冲突,提交之前都要把自己创建的分支删除掉)

4、和第一种只使用MASTER分支一样了,把本地最新合并的MASTER分支代码,提交到远程仓库的MASTER分支下(冲突合并即可)

操作分支的基础命令:
$ git branch 查看现有的分支
$ git branch xxx 创建一个新的分支 (当切换到某个分支上的时候,会把当前MASTER分支中的新信息同步到这个分支上)
$ git checkout xxx 切换到某个分支上
$ git checkout -b xxx 创建一个新分支并且切换到这个分支上
$ git branch -D xxx 删除某个分支(一定要切换到其它分支上才可以删除当前分支)
$ git merge xxx 合并分支内容

$ git log --graph / --oneline 在有分支的情况下,可以更清楚查看分支的提交和合并内容(了解就好)

gitHub界面操作

给别的仓库提交代码修改或者建议

1、首先fork别人的仓库

  • 把别人的仓库克隆一份一模一样的,放到自己的账号下,变为自己的仓库(我们平时可以修改自己仓库中的源码)

  • fork的仓库和别人原始的仓库会默认建立一些关系,我们可以把自己仓库中和别人仓库中不一样的地方,提交给别人(pull-request)

2、把自己fork的仓库,克隆到本地

  • 以后有一些新的代码心得,可以自己尝试去修改,然后同步到自己fork的仓库中

3、在gitHub中发送 new pull request

gitHub还可以发布非后台项目

gitHub只提供了web站点的发布,后台项目没有提供必要的环境

[把整个仓库作为一个项目发布]
这种模式不常用

[master是项目代码 gh-pages分支下存储的是项目预览页面的代码]

  • 其他人克隆研究的是master分支下的代码

  • 看介绍页面是gh-pages分支下的代码

1、创建一个仓库
2、把仓库克隆到本地
3、把源码传到master分支上
4、在本地仓库中创建gh-pages分支
5、把介绍页面放在gh-pages分支下
6、把介绍页面的内容上传到github的gh-pages分支下
访问页面:https://用户名.github.io/仓库名/页面名.html (如果页面是index可以忽略不写)

以上是关于GIT管理及基础的Linux命令的主要内容,如果未能解决你的问题,请参考以下文章

git------git的基本介绍及linux的基本命令------凡尘

CentOS搭建Git服务器及权限管理

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

Git入门到高级系列1-git安装与基础命令

VSCode自定义代码片段——git命令操作一个完整流程