一、Git原理

1、Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

2、Git有什么特点?

简单来说就是:高端大气上档次!

3、GIt与SVN区别

SVN管理

属于集中式版本控制系统,版本库是集中存放在中央服务器,必须联网才能工作,脱离局域网,采取互联网提交大文件会比较慢

Git管理:

属于分布式版本控制系统,根本没有“中央服务器”,安全性高,每个人的电脑上都是一个完整的版本库,即电脑硬盘上会有个版本这样,你工作的时候,就不需要联网了。即使中央服务器出了问题,从其他人那复制一个就好了

4、Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

下图展示了 Git 的工作流程:

二、Git 配置

1、配置个人的用户名称和电子邮件地址

$ git config --global user.name "username"

$ git config --global user.email yourmail

2、在客户端生成ssh key

  • 安装客户端后在桌面任意空白处右击
  • 打开Git Base Here然后输入下面命令
  • 打开本地git bash,使用如下命令生成ssh公钥和私钥对
  • ssh-keygen -t rsa -C 'xxx@xxx.com' 然后一路回车(-C 参数是你的邮箱地址)
  • 然后打开~/.ssh/id_rsa.pub文件(~表示用户目录,比如我的windows就是C:\Users\Administrator),复制其中的内容
  • 打开gitlab,找到Settings -->Profile -->SSH Keys--->Add SSH Key,并把上一步中复制的内容粘贴到Key所对应的文本框,在Title对应的文本框中给这个sshkey设置一个名字,点击Add key按钮

三、Git常用操作

1、创建一个版本库

Ps:只是一个空目录哦

$ mkdir mytest

2、通过git init命令把这个目录变成Git可以管理的仓库

$ git init

Initialized empty Git repository in C:/Users/userAccount/Desktop/test/.git/

ps:目录下会自动生成.git,误删,毕竟全靠它做版本管理

第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "test add file"

[master (root-commit) 5a92835] test add file

1 file changed, 1 insertion(+)

create mode 100644 mytest/readme.txt

3、版本的操作内容操作查看

本地版本操作:(连续操作一个文件并提交好多次)

git log日志查看命令

$ git log

commit d9669171c9c5890fd282c40a7e7fe0c372074233 (HEAD -> master)

Date:   Thu Apr 4 14:52:23 2019 +0800

test third version

commit 6b39a4a6ce09c472e7f9c09e50c79c78b2efee16

Date:   Thu Apr 4 14:51:11 2019 +0800

test second version

commit 9e42e41abf01d85e163b3d63c41bf5b099920d47

Date:   Thu Apr 4 14:47:32 2019 +0800

test first version

commit dca156cf9c72b17f5d1aaff88ebfbfc79d5b91e2

Date:   Thu Apr 4 14:46:39 2019 +0800

test add file

:

比较直观的方式查看

$ git log --pretty=oneline

4、版本回退操作

比如返回上一个版本

$ git reset --hard HEAD^

HEAD is now at 6b39a4a test second version

Git的版本是生成是十六进制生成的,我的上一版本是如截图:

再查看日志当前版本是否为6b39a4a

回滚到某个指定版本

$ git reset --hard dca156cf

HEAD is now at dca156c test add file

再查看日志当前版本是否为dca156cf

优势:回滚很快呀

5、git status 查看状态

比如我对readme.txt内容做了修改,再输入git status查看状态

git checkout -- file可以丢弃工作区的修改,即撤销修改

$ git checkout -- readme.txt

再次输入git status 发现文件回滚到改动之前了

6、删除文件操作

先增加一个文件

$ git add delete.txt

再删除文件

$ rm delete.txt

查看文件状态

$ git  status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

new file:   delete.txt

Changes not staged for commit:

(use "git add/rm <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes in working directory)

deleted:    delete.txt

提交修改

$ git commit -m "remove test.txt"

[master cc6aa8f] remove test.txt

1 file changed, 0 insertions(+), 0 deletions(-)

create mode 100644 mytest/delete.txt

7、将本地仓库和远程仓库相关联

$ git remote add origin git@172.16.5.128:RefainZero/demo.git

把本地库的所有内容推送到远程库

$ git push -u origin master

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

Everything up-to-date

8、从远程仓库获取代码

$ git clone git@172.16.5.128:RefainZero/demo.git

Cloning into 'demo'...

remote: Counting objects: 16, done.

remote: Compressing objects: 100% (5/5), done.

remote: Total 16 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (16/16), done.

9、解决冲突

1)、先制造一个冲突

情景,readme.txt中的,文本默认是test

git status

修改本地的readme.txt中文本内容为“20191635”

在服务器也修改了readme.txt,修改文本内容为“就想冲突下”

2)、提交本地的代码到远程仓库

在服务器执行git pull(获取最新代码)

不负众望,果然发生代码冲突

3)、解决文件中冲突的的部分

打开冲突的文件

4)、把冲突标记删掉,把冲突解决正确

提交修改,并同步到远程仓库

$ git add readme.txt

$ git commit -m '解决冲突的测试'

[master 0feb18f] 解决冲突的测试

$ git push origin master

Counting objects: 8, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (4/4), done.

Writing objects: 100% (8/8), 740 bytes | 740.00 KiB/s, done.

Total 8 (delta 0), reused 0 (delta 0)

To 172.16.5.128:RefainZero/demo.git

ca9bc5e..0feb18f  master -> master

再次从服务器上获取最新代码,验证是否冲突

$ git pull

Already up to date.

四、附:Gitlab显示的提交内容

GitLab实战操作指南的更多相关文章

  1. Burp Suite渗透实战操作指南-上篇

    Burp必备知识 在介绍功能之前有必要让大家了解一些burp的常用功能,以便在使用中更好的发挥麒麟臂的优势. 1.1  快捷键 很多人可能都没用过burp的快捷键吧,位置如下,不说话,如果不顺手可以自 ...

  2. GitLab → 搭建私有的版本控制的托管服务平台

    开心一刻 睡着正香,媳妇用力把我晃醒说:“快起来,我爸来了.” 我一下醒了,手脚熟练的把衣服一抱,滚到床底,顺便把鞋也收了进去 媳妇蹲下无奈的说:“快出来!咱俩都结婚半年了.” 我:“对哦,搞习惯了” ...

  3. jenkins+gitlab自动化编译部署方案探索及服务端编译webpack实战

    一. 背景 之前我们的开发流程为在本地进行webpack打包编译,然后svn提交源代码和编译后的代码.同时每次提交前也会从svn更新源代码和编译后的代码.这样做有几个缺点: 1. svn 更新和提交编 ...

  4. LDAP落地实战(三):GitLab集成OpenLDAP认证

    上一篇文章介绍了svn集成OpenLDAP认证,版本控制除了svn外,git目前也被越来越多的开发者所喜爱,本文将介绍GitLab如何集成openldap实现账号认证 GitLab集成OpenLDAP ...

  5. Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成实战终极教程

    实战教程篇 前言 这边就不教大家怎么用 pytest 写项目了哦,下面有系列文章能帮助你快速入门 Pytest + Allure 这一篇教程主要是教如何从 0 到 1 搭建自动化测试的持续集成环境 后 ...

  6. Docker 实战(4)- 结合 Jenkins + Gitlab 完成自动化测试的持续集成实战

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html Jenkins 关联 Gitla ...

  7. Gitlab Runner的分布式缓存实战

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. gitlab 操作指南

    重置密码 https://docs.gitlab.com/ce/security/reset_root_password.html gitlab 一键安装 https://docs.gitlab.co ...

  9. gitlab操作指南

    概述 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码 ...

随机推荐

  1. vue前端开发。。。

    1. 官网下载 https://nodejs.org/en/ 2. 安装cnpm   在命令行:  npm install -g cnpm --registry=https://registry.np ...

  2. jQuery 与 Ajax 的应用

    Ajax 全称为 "Asynchronous JavaScript and XML"(异步 JavaScript 和 XML ),它并不是指一种单一的技术,而是有机地利用了一系列交 ...

  3. centos7之zabbix服务器的常规优化

    一.硬件需求分析 1.首先我们来分析一个硬件需求,这里我以400个agent计算,CPU建议是4核,内存不要少于8GB,硬盘只要不是用了很久的主机就行,容量的话建议300GB基本就够使用好一段时间了, ...

  4. position: fixed; ios 无法滑动解决

    添加以下代码搞定 -webkit-overflow-scrolling: touch; overflow-y: scroll;

  5. Shodan的http.favicon.hash语法详解与使用技巧

    在Shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法来搜索出使用了同一icon图标的网站,不知道怎么用的朋友请参考我上一篇文章. 通过上一 ...

  6. vue router 修改title(IOS 下动态改变title失效)

    在ios下app  设置document.title = "titleName" 失效,原因是在IOS webview中网页标题只加载一次,动态改变是无效的. 在路由配置中添加   ...

  7. 关于objdump的博文整理

    objdump主要用于查看对象文件的内容信息 objdump一些基本命令:http://www.169it.com/article/330129798173630299.html 使用readelf和 ...

  8. POJ-3494 Largest Submatrix of All 1’s (单调栈)

    Largest Submatrix of All 1’s Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 8551   Ac ...

  9. JS学习笔记Day20

    一. 1.服务器和客户端 客户端 程序: 通过浏览器直接运行 服务器 程序: 通过安装某种服务器软件   程序才可以运行              apache   php文件             ...

  10. 如何在Linux中使用命令行卸载软件

    您可以使用“dpkg”命令来查看您的计算机,按“Ctrl + Alt + T”的所有已安装包的列表,打开一个终端窗口. 在提示符下键入以下命令,然后按Enter键.dpkg -- list 要卸载程序 ...