• GIt版本管理


    Git版本控制系统

    大部分公司使用:

    一些老公司:

    Windows Git 客户端使用

    • windows的git,本质是windows上的linux系统
    • TortoiseGit-2.2.0.0-64bit 给git加外壳,svn客户端的git版本

    下载安装

    官网下载

    一直下一步即可

    使用

    右键点击,Git GUI 是图形化界面,一般用第二个Git 命令行模式

    Git Linux 使用

    不用下载系统自带,没有的话yum安装

    Git全局配置

    这一步可以简单理解为创建一个账户。更多用户操作点这

    git config --global user.name "lxf"                        #配置git使用用户
    git config --global user.email "asd1043014835@163.com"     #配置git使用邮箱
    git config --global color.ui true                          #语法高亮
    git config --list                                          #查看全局配置

    git init

    初始化Git工作目录

    工作目录就是,里面可以存放你的笔记、代码,而且里面有个隐藏目录.git,里面存放的是历史记录、历史备份,都存在隐藏目录。

    # 创建工作目录
    [root@CentOS7 ~]# mkdir git_data 
    [root@CentOS7 ~]# cd git_data/
    # 初始化
    [root@CentOS7 git_data]# git init
    Initialized empty Git repository in /root/git_data/.git/
    #.git目录存放所有历史备份文件,文件都不是明文存放
    [root@CentOS7 git_data]# ll -a
    total 0
    drwxr-xr-x. 3 root root 18 Jun 28 18:21 .
    dr-xr-x---. 4 root root 198 Jun 28 18:21 ..
    drwxr-xr-x. 7 root root 119 Jun 28 18:21 .git
    [root@CentOS7 git_data]# git status  # 查看工作区状态
    # On branch master # 在主分支
    #
    # Initial commit  # 初始提交
    #
    nothing to commit (create/copy files and use "git add" to track)

    git add

    创建数据-提交数据

    [root@git git_data]# pwd
    /root/git_data
    [root@git git_data]# touch README       #在工作目录的创建一个文件
    [root@git git_data]# git status         #创建个文件后在查看git状态就会不一样
    # On branch master
    #
    # Initial commit
    #
    # Untracked files:                      #Untracked 没有跟踪的文件
    #   (use "git add <file>..." to include in what will be committed)   #提示你用这个命令提交创建的文件
    #
    #    README                             #红字表示没有跟踪的文件
    nothing added to commit but untracked files present (use "git add" to track)
    [root@git git_data]# git add README     #根据提示提交创建的文件
    [root@git git_data]# git status         #然后在查看一下git的状态,又会改变
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached <file>..." to unstage)
    #
    #    new file:   README                #已经跟踪的文件会变绿,然后才可以提交文件
    #                                      #设置颜色高亮不同状态才显示不同颜色

    git工作原理

    git提交一个数据或文件,它要分为两步骤,三个区域

    • 工作目录是:git_data目录,我们在这里创建了一个README文件
    • 然后git add README,这样只是把这个文件提交到了:暂存区域
      • 为什么要设置暂存区域,使你万一提交错了可以反悔,保存到服务器就删不掉了,有个缓存的区域
    • Ÿ所以git add 表示提交数据到暂存区域,但我们最终目标还是要把文件交给git服务器,所以最后一步是吧文件交给git服务器
    • Ÿ怎么提交给git服务器呢?一个命令git commit:提交暂存文件至版本库。

    git commit使用

    git commit -m 'first commit'      #一次把暂存区域的文件,全部提交
    # -m 的意思是为你提交的文件写一个说明,关于哪方面的,提交的什么东西,都可以详细的写出来
    #一定要写,方便查找历史记录,而且不写也会提示你写
    [root@git git_data]# git commit -m 'first commit'
    [master (root-commit) cc09e5a] first commit          #master:主分支,中括号口面是-m的说明
     2 files changed, 0 insertions(+), 0 deletions(-)    #2个文件改变了,0个插入,0个删除
     create mode 100644 README                           #创建了权限是644的文件README
     create mode 100644 gittest                          #创建了权限是644的文件gittest
    git add  *        # 添加工作目录里的所有文件到暂存区域

    修改或删除暂存区域的文件

    没有添加到暂存区的数据直接rm删除即可。

    已经添加到暂存区数据:

    • 创建一个文件:touch test
    • 添加到缓存区:git add test

    从缓存区里删除的方法三种:

    方法一:git rm --cached test
    方法二:git reset HEAD test
    #将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)
    
    方法三:git rm -f test
    #将文件数据从git暂存区和工作目录一起删除

    文件改名

    普通文件改名:    mv test test1
    加入缓存区后:git mv test test1

    查看历史记录,git日志

    git log   #→查看提交历史记录
    [root@git git_data]# git log           #显示一组信息,因为只提交了一次
    commit cc09e5aeb33861d68a4580a5ecff66  #给每一次提交一个序列号,查找某个记录用,如果要回滚某个历史版本,回滚命令+序列号
    Author: lxf <asd1043014835@163.com>    #这行表示,作者是谁
    Date:   Wed Apr 25 12:39:51 2018 +0800 #日期
    
        first commit                       #本次提交说明信息,提交的什么东西,-m时指定的
    git log -2         #查看最近几条记录
    git log -1 -p      #-p显示每次提交的内容差异,例如仅查看最近一次差异
    git log -2 --stat  #--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
    git log --pretty=oneline  #--pretty根据不同的格式展示提交的历史信息
    回滚时用很方便这个命令
    git log --pretty=fuller -2       #以更详细的模式输出提交的历史记录
    git log --pretty=fomat:"%h %cn"  #查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。
    #→还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:
    %s  提交说明。
    %cd 提交日期。
    %an 作者的名字。
    %cn 提交者的姓名。
    %ce 提交者的电子邮件。
    %H  提交对象的完整SHA-1哈希字串。
    %h  提交对象的简短SHA-1哈希字串。
    %T  树对象的完整SHA-1哈希字串。
    %t  树对象的简短SHA-1哈希字串。
    %P  父对象的完整SHA-1哈希字串。
    %p  父对象的简短SHA-1哈希字串。
    %ad 作者的修订时间。

    快速添加

    #只有修改状态的文件才能使用,就是提交过一次,修改后,可以使用这个命令一步到位

    git commit -a  -m "modifie README"          #-a 表示直接提交

    还原历史数据

            Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

    画图理解,想看哪个版本链接到哪个版本即可,就好像软链接

    还原历史版本方法:

    # 方法一:还原历史提交版本上一次
    git reset --hard HEAD^
    # 上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本
    
    # 方法二:利用版本序列号 :显示序列号:git log --pretty=oneline
    git reset --hard 3de15d4   
    #精确还原到某个版本用,找到历史还原点的SHA-1值(序列号)后,就可以还原(值不写全,系统会自动匹配)

    还原未来数据

    # 找出未来版本的序列号,直接git reset --hard 版本号还原

    git reflog  # 查看未来历史更新点

    git reset --hard 版本号

    标签使用

    #前面回滚使用的是一串字符串,又长又难记,那么每次提交commit完以后打一个标签git tag v1.0默认给当前的版本或最新的版本打一个标签,方便回滚的时候直接git reset --hard v1.0即可。

    git tag v1.0     #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag
    git tag          #查看当前所有的标签
    git show v1.0    #查看当前1.0版本的详细信息
    git tag v1.2 -m "version 1.2 release is test"  #创建带有说明的标签,-a指定标签名字,-m指定说明文字
    git tag -d v1.0   #我们为同一个提交版本设置了两次标签,删除之前的v1.0
    git reset --hard v1.0 # 还原到标签v1.0版本

    对比数据

    git diff 可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放心多了。
    git diff README

    没有结果是没有修改,修改一下:

     

    分支结构

    之前一只是在master分支(主分支)操作

    创建,查看,切换,删除分支

    git branch linux    # 创建linux分支,branch是树枝、分支的意思

    git branch           # 查看分支,*号在哪就是在哪个分支

     

    git checkout linux  # 切换linux分支

     

    git branch -d linux  #删除linux分支

    checkout的另一个功能

    git checkout -- README   # 一键还原README文件

    [root@git git_data]# git status              #没有有改动的文件
    # On branch master
    nothing to commit, working directory clean
    [root@git git_data]# echo 666 > README       #改动一个文件
    [root@git git_data]# git status              #然后有修改的文件
    # On branch master
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #    modified:   README                      #文件被修改
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [root@git git_data]# git checkout -- README  #一键还原,就是还原文件当前版本最初的状态
    [root@git git_data]# git status              #没有改动的文件
    # On branch master
    nothing to commit, working directory clean

    合并分支

    git checkout master     # 切换到主

    git merge linux             # 分支linux合并至当前分支,merge合并。

    git branch -d linux       # 一个良好的习惯,合并完分支以后,把分支删掉

    分支冲突

    就是主分支和分支一样两行内容,主分支加了一行,分支加了一行,合并的时候就会产生冲突,这时候需要手工合并,解决分支合并冲突。如图:

    #合并失败,人工介入,修正了冲突以后,就可以提交了

    [root@git git_data]# vim README 
    <<<<<<< HEAD   #留下保留的内容其他绿色部分全删除
    123   #这是主分支添加的新一行内容,合并时和linux分支发生了冲突,如果保留这行其他全删
    =======         #留下保留的内容其他绿色部分全删除
    312   #这是linux分支添加的新一行内容,合并时和主分支发生了冲突,如果保留这行其他全删
    >>>>>>> linux    #留下保留的内容其他绿色部分全删除

    git branch -d linux  #确认合并完成后,可以放心地删除Linux分支。

    GitLab私有服务器

    git人人都是中心,通过gitlab服务器共享代码

    安装文档  https://about.gitlab.com/downloads/#centos7

    https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

    安装

    机器内存给大点

    上传安装包,百度下载

    yum -y localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm  # 安装本地yum包
    gitlab-ctl reconfigure    # 初始化,就执行一次
    gitlab-ctl status     # 安装了很多服务,所以启动的时候,有冲突的服务端口,会导致启动不来,所以安装gitlab需要一个干净的机器
    gitlab-ctl status/stop/start

    网页登陆

    通过浏览器访问页面10.0.0.63,第一次登陆需要设置初始密码12345678,然后登陆

    账户:root  密码:12345678

    gitlab使用

    首先创建新的项目:

    这是私有的,所以需要秘钥才能访问

    进行SSH key认证

    ssh-keygen                 #在git服务器生成一对秘钥,然后回车三连
    cat /root/.ssh/id_rsa.pub      #秘钥对私钥和公钥,分发的是公钥,公钥等于锁头,私钥留在手中

    创建新的仓库

     这个页面拉倒下面

    git clone git@10.0.0.63:root/43team.git #克隆上面创建的项目,cd进去就是一个git工作目录,默认当前目录创建
    cd 43team
    touch README.md
    git add README.md
    git commit -m "add README"
    git push -u origin master             #推送代码,这样就推送到了gitlab服务器里,页面里查看。

    README里是空的,在网页里写点内容,先点击文件打开

     

    然后点击Edit是编辑文件,往里面写点内容

     

    第一步填写本次提交的注释,相当于git commit -m "注释" ,它默认有给你写,第二步是确定修改

     

    下载代码

    git pull    #下载代码

     

    新增三个命令:上传代码,和下载代码

    git clone git@IP地址:root/43team.git #只在第一次复制代码使用,其他时候用下载代码命令即可
    git push -u origin master #推送代码,这样就推送到了gitlab服务器里,页面里查看
    git pull #下载代码

    总结

    Command line instructions 命令行指令

    Git global setup  全局设置

    git config --global user.name "Administrator"

    git config --global user.email "admin@example.com"

    Create a new repository  创建新的仓库

    git clone git@10.0.0.63root/43team.git

    cd 43team

    touch README.md

    git add README.md

    git commit -m "add README"

    git push -u origin master

    Existing folder

    cd existing_folder

    git init

    git remote add origin git@10.0.0.63root/43team.git

    git add .

    git commit

    git push -u origin master

    Existing Git repository

    cd existing_repo

    git remote add origin git@10.0.0.63root/43team.git

    git push -u origin --all

    git push -u origin --tags

    Git 命令总结

    添加用户

    git config --global user.name "lxf"                        #配置git使用用户
    
    git config --global user.email "asd1043014835@163.com"     #配置git使用邮箱
    
    git config --global color.ui true                          #语法高亮
    
    git config --list                                          #查看全局配置

    创建git工作目录

    cd && mkdir git_data  && cd git_data/ && git init 

    提交到缓存、git服务器命令

    查看git状态:git status
    
    提交文件到缓存区:git add file
    
    提交工作目录里的所有文件缓存区:git add *
    
    把所有缓存区的文件提交到git服务器:git commit -m '这里面是说明提交的是什么'

    删除暂存区的文件

    方法一:git rm --cached test
    
    方法二:git reset HEAD test
    #将文件从git暂存区移除,不会删除工作目录里的文件
    
    方法三:git rm -f test
    #将文件从缓存区里移除,并删除,一次到位

    文件改名

    普通文件改名:    mv test test1
    
    加入缓存区后:git mv test test1 

    查看历史记录命令,就是查看git日志

    git log            #查看历史记录
    
    git log -2         #查看最近几条记录
    
    git log -1 -p      #-p显示每次提交的内容差异,例如仅查看最近一次差异
    
    git log -2 --stat  #--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
    
    git log --pretty=oneline         #--pretty根据不同的格式展示提交的历史信息

    回滚时用,很方便这个命令

    git log --pretty=fuller -2       #以更详细的模式输出提交的历史记录
    
    git log --pretty=fomat:"%h %cn"  #查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。
    #→还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:
    %s  提交说明。
    %cd 提交日期。
    %an 作者的名字。
    %cn 提交者的姓名。
    %ce 提交者的电子邮件。
    %H  提交对象的完整SHA-1哈希字串。
    %h  提交对象的简短SHA-1哈希字串。
    %T  树对象的完整SHA-1哈希字串。
    %t  树对象的简短SHA-1哈希字串。
    %P  父对象的完整SHA-1哈希字串。
    %p  父对象的简短SHA-1哈希字串。
    %ad 作者的修订时间。

    还原历史版本方法:

    方法一:还原历史提交版本上一次
    git reset --hard HEAD^
    ##上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本
    
    方法二:利用版本序列号,显示序列号: git log --pretty=oneline
    git reset --hard 3de15d4   #精确还原到某个版本用,找到历史还原点的SHA-1值(序列号)后,就可以还原(值不写全,系统会自动匹配)

    还原未来数据

    #找出未来版本的序列号,直接git reset --hard 版本号还远
    
    git reflog  #查看未来历史更新点

      git reset --hard 版本号

    标签使用

    #前面回滚使用的是一串字符串,又长又难记,那么每次提交commit完以后打一个标签git tag v1.0默认给当前的版本打一个标签,方便回滚的时候直接git reset --hard v1.0即可。
    
    git tag v1.0     #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
    
    git tag          #查看当前所有的标签
    
    git show v1.0    #查看当前1.0版本的详细信息
    
    git tag v1.2 -m "version 1.2 release is test"  #→创建带有说明的标签,-a指定标签名字,-m指定说明文字
    
    git tag -d v1.0   #→我们为同一个提交版本设置了两次标签,删除之前的v1.0

    分支-操作

    git branch linux         #创建linux分支,branch是树枝、分支的意思
    
    git branch               #查看分支,*号在哪就是在哪个分支
    
    git checkout linux       #切换linux分支
    
    git branch -d linux      #删除linux分支
    
    git checkout -- README   #一键还原README文件
    [root@git git_data]# git status              #没有有改动的文件
    # On branch master
    nothing to commit, working directory clean
    [root@git git_data]# echo 666 > README       #改动一个文件
    [root@git git_data]# git status              #然后有修改的文件
    # On branch master
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #    modified:   README                      #文件被修改
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [root@git git_data]# git checkout -- README  #一键还原,就是还原文件当前版本最初的状态
    [root@git git_data]# git status               #没有改动的文件
    # On branch master
    nothing to commit, working directory clean

    合并分支

    git checkout master     #切换到主
    git merge linux         #分支linux合并至当前分支,merge合并。
    git branch -d linux     #一个良好的习惯,合并完分支以后,把分支删掉

    分支冲突

    就是主分支和分支一样两行内容,主分支加了一行,分支加了一行,合并的时候就会产生冲突,这时候需要手工合并,解决分支合并冲突。如图:

    #合并失败,人工介入,修正了冲突以后,就可以提交了

    [root@git git_data]# vim README 
    <<<<<<< HEAD   #留下保留的内容其他绿色部分全删除
    123   #这是主分支添加的新一行内容,合并时和linux分支发生了冲突,如果保留这行其他全删
    =======         #留下保留的内容其他绿色部分全删除
    312   #这是linux分支添加的新一行内容,合并时和主分支发生了冲突,如果保留这行其他全删
    >>>>>>> linux    #留下保留的内容其他绿色部分全删除

    git branch -d linux  #确认合并完成后,可以放心地删除Linux分支。

    上传和下载代码

    git push -u origin master   #推送代码,这样就推送到了gitlab服务器里,页面里查看
    git pull                    #下载代码

    补充stash

    git stash 把当前正在开发的东西保存起来  回到当前版本的状态

    比如当前版本是:

    <li>欧美</li>
    <li>动画</li>
    <li>日韩</li>

    正在开发的是:

    <li>欧美</li>
    <li>动画</li>
    <li>日韩</li>
    <li>国产正在开发中。。。

    这时候各种原因,需要删除动画然后继续开发。

    git stash就用到了,执行git stash命令保存正在开发的东西并回到当前版本的状态并删除动画

    <li>欧美</li>
    <li>日韩</li>

    然后要继续开发国产,执行git stash pop得到:

    <li>欧美</li>
    <li>日韩</li>
    <li>国产正在开发中。。。

    如果出现冲突,留下任意绿色的内容其它全删掉即可

    stash相关命令

    git stash           将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    git stash list      查看“某个地方”存储的所有记录
    git stash clear     清空“某个地方”
    git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
    git stash drop      编号,删除指定编号的记录

    githup&gitlab命令

    # 给域名起个别名 ,相当于origin=https....
    
    git remote add origin https://github.com/lixiaofeng-githup/test.git
    
    # 推送到远程仓库的master分支
    
    git push -u origin master
    
    # 第一次拉取代码,会让输入gitlab or githup的账户密码
    
    git clone 地址
    
    # 以后只需要
    
    git pull  相当于下面两步
    git fetch origin dev # 拉到暂存区
    git merge origin/dev # 合并
    git rebase origin/dev # 面试题rebase的作用,保持提交记录的整洁
  • 相关阅读:
    使用Swagger2构建强大的RESTful API文档(2)(二十三)
    使用Swagger2构建强大的RESTful API文档(1)(二十二)
    开发Web应用(2)(二十一)
    开发Web应用(1)(二十)
    RESTful API单元测试(十九)
    构建RESTful API(十八)
    Spring boot exe4j可执行exe与jre1.8捆绑
    Spring boot项目 jar转exe执行(exe4j)
    分布式消息事务一致性,以及rocketMq实现
    Linux node 安装
  • 原文地址:https://www.cnblogs.com/lxfpy/p/11122207.html
Copyright © 2020-2023  润新知