• Git版本控制工具使用




    1. CICD系统构成和流程

    1.1 CICD来源及概念

    CI/CD的采用改变了开发人员和测试人员如何发布软件。CICD指的是持续集成(Continuously Integration)、持续部署(Continuously Deployment)。可见:

    以下是相关的CICD系统示例图。对于开发人员而言,应该是对应Dev和CI部分,也即图中的开发组的角色。这里了解一下R&D角色在系统中的位置即可,不做展开,主要针对Git的使用。


    1.2 Git版本控制系统

    版本控制系统分类:

    集中式版本控制(SVN/CVS)
    分布式版本控制(Git)

    Git仓库的结构:

    Git仓库中文件的四种状态:

    这里感觉Untracked状态通过add应该是变为Unmodified的。



    2. Git操作和使用


    git config (基本配置操作)

    ~/.gitconfig:通过修改该配置文件来对git进行个性化配置,如[user][filter "lfs"][alias]等
    git config --global user.email :设置User的邮箱地址
    git config --global user.name :设置User的名字,显示在log上的用户标识
    git config --global alias. :将对应的命令简写为
    git config -help:查看帮助文档,同man git-config
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对于.gitconfig文件的配置见:Git config 配置


    git clone (创建仓库|拷贝已有仓库)

    git init:创建仓库,具体选项工作中用不到,略过
    git clone :克隆/拷贝已有仓库到本地,共有四种登录方式:
    (1)git clone git@:/.git 
    	ssh登录方式,无需输入密码,但是需设置过ssh key(ssh-keygen)
    (2)git clone http:////.git 
    	http登录方式,需要输入账号和密码(以gitlab,gitee等)
    (3)git clone -b $branch--single-branch git@:/.git 
    	只克隆某个分支的代码
    (4)git clone -b $branch--single-branch --depth 1 git@:/.git 
    	只克隆某个分支的最新代码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    git branch (分支相关操作- 创建|查看|删除)

    git branch:列出本地已经存在的分支,当前分支使用"*"标记
    git branch -r:查看远程版本库分支列表
    git branch -a:查看本地和远程版本库所有分支列表
    git branch :创建名为myBranch的分支
    git branch  :基于的最新版本创建本地的
    git branch -d :删除名为myBranch的分支,如果分支中有未merge的提交(未push的commit),则删除失败
    git branch -D :强制删除名为myBranch的分支
    git branch -vv:查看HEAD所指本地分支对应的远程分支
    git branch -m  :修改分支名称
    git branch --contains :查看所对应Revision所属分支
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    git checkout (操作文件和分支)

    git checkout :将当前分支切换到分支,即HEAD指向
    git checkout :放弃对文件的修改
    git checkout .:放弃当前目录下的修改
    git checkout -b  :在本地创建新分支,并切换到新创建的分支上
    
    • 1
    • 2
    • 3
    • 4

    以上最后一条命令等价于下面命令组合:

    git branch  
    git checkout 
    
    • 1
    • 2

    git add/commit (提交和修改-保持本地修改)

    git add  (...):需要提交的代码从工作区添加到暂存区
    git commit -m <"remark">  (...):将暂存区改动提交到本地库中
    git status -uno:查看本地修改的文件(只检查在git中的文件,untracked no?)
    git commit -m "message"/git commit :将修改的文件提交到本地仓库中
    	(后者在vim打开的第一行中编辑message信息)
    git add  -> git commit --amend:追加提交,需要注意好像是将所有modified追加?
    	(不增加新的commit id情况下把新修改代码追加到前一次commit中去)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    每次commit都会生成一个40位哈希码的唯一ID。


    git reset (提交和修改-撤销本地修改)

    git reset HEAD :撤销添加到暂存区的文件(只add,没commit)
    git reset --soft HEAD~1/$commit id:撤销已经添加到本地版本库的提交(已经commit)
    	(只撤销commit,不撤销add,保留编辑器改动)
    git reset --mixed HEAD~1:全部撤回HEAD所指分支最近一次的commit及其add
    	(撤销commit,撤销add,保留编辑器改动)
    git reset --hard HEAD~1:暴力撤回HEAD所指分支最近一次的commit及其相关工作
    	(肥肠暴力,将commit、add、working directory全部撤销,慎重使用)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    git restore (撤销修改-撤销暂存区和工作区修改)

    git restore --staged :撤销添加到暂存区的文件,并在工作区中保留修改的内容
    git restore :撤销工作区中文件所修改的内容,和本地仓库保持一致
    
    • 1
    • 2

    git rm/mv (提交和修改-删除与重命名)

    git rm :将文件从暂存区和工作区中给删除
    git rm --f :如果删除之前对文件修改过且add,则必须加上--f来删除
    git rm --cached :将文件从add中/暂存区移除,但是物理文件保留在工作目录
    	(等同于git reset)
    git mv (--f)  :移动或重命名一个文件、目录或软连接
    
    • 1
    • 2
    • 3
    • 4
    • 5

    git diff (查看改动-查看改动DIFF)

    git diff :比较本地已经修改,但尚未缓存的改动(没有git add)
    git diff --cached :查看已经在缓存中的改动(已经git add,但没有commit)
    git diff HEAD :查看已缓存和未缓存的所有改动(上面两种情况)
    git diff  :查看两次commit的DIFF
    git diff --stat:显示摘要而非整个diff
    git difftool :使用缺省的difftool
    git difftool -t tkdiff  :使用指定的difftool,查看两commit_id之间的差异
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    git log/reflog/blame (查看提交日志-查看历史提交记录)

    git log -n :指定输出的log数目
    git log --pretty='%h:%cd:%an:%s' --date=format:'%Y%m%d:%H%M%S' -n 10:指定log的形式(commit_id:date:time:message)
    git reflog -n :查看所有分支的所有操作记录(包括已经被删除的commit记录和reset操作)
    git reflog show :查看当前分支的源分支
    git blame :查看指定文件的修改记录,显示文件最后修改的版本和作者
    git blame -L , :查看指定文件,显示文件每行最后修改的版本和作者
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    git merge/rebase (合并与变基,将两个或以上的开发历史合并在一起)

    git merge  :将feature分支的内容merge到master分支
    git merge --continue:解决冲突后继续merge
    git merge --abort:放弃当前的merge
    git checkout  -> git rebase master:将master的内容rebase到feature分支
    
    • 1
    • 2
    • 3
    • 4
    git merge
    git rebase

    运行git merge时,HEAD分支会生成一个新的提交,并保留每个提交历史的祖先

    命令
    git merge
    git rebase
    优点(1)用法简单,易于理解;
    (2)保持源分支的原始上下文;
    (3)源分支的提交和其它分支的提交是分开的;
    (4)可以保留提交历史;
    (1)代码历史是简化的、线性的、可读的;
    (2)与许多独立的特性分支的提交历史相比,操作单个提交历史更容易;
    (3)干净、清晰的提交信息可以更好地跟踪一个bug或何时加入的feature,
         可以避免众多的单行提交污染历史;
    缺点会更改历史提交时间,可能会丢失上下文
    用法将feature分支合并到主分支使用merge将源分支的更新同步到feature分支用rebase
    禁止在公共分支上使用rebase!!!

    git pull/fectch/push (远端操作,推送到远端或与远端同步)

    git pull  : (e.g. git pull origin master:brantest):
    	将远程主机origin的master分支拉取过来,并与本地的brantest分支合并
    git pull = git fetch + git merge,进而有上述命令等同于:
    	git fetch origin master:brantest -> git merge brantest
    git checkout master -> git pull:将远端仓库的最新代码拉取到本地(常用)
    git push  :将本地的branchName分支推送到hostName远端仓库的branchName分支
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    git fetch不会进行合并执行后需要手动执行git merge合并分支,而git pull拉取远程分之后直接与本地分支进行合并。更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。

    git push
    文件穿梭命令示意
  • 相关阅读:
    centos下安装elasticsearch-head
    鸿蒙智联开发者平台项目的理解介绍
    并发编程(二)原子性和Synchronized同步锁
    基于CodeFormer实现图片模糊变清晰,去除马赛克等效果
    【产线故障】线上接口请求过慢如何排查?
    pdf导出工具类
    PS的抠图算法原理剖析 1
    string的学习
    软考网络工程师IPSEC VPN配置考点总结
    glibc2.35-通过tls_dtor_list劫持exit执行流程
  • 原文地址:https://blog.csdn.net/yueguangmuyu/article/details/128005974