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 <ur_email@example.com>:设置User的邮箱地址
git config --global user.name <ur_name>:设置User的名字,显示在log上的用户标识
git config --global alias.<alias_name> <opt_name>:将<opt_name>对应的命令简写为<alias_name>
git config -help:查看帮助文档,同man git-config

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


git clone <repo URL> (创建仓库|拷贝已有仓库)

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

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

git branch:列出本地已经存在的分支,当前分支使用"*"标记
git branch -r:查看远程版本库分支列表
git branch -a:查看本地和远程版本库所有分支列表
git branch <myBranch>:创建名为myBranch的分支
git branch <myBranch> <masterBranch>:基于<masterBranch>的最新版本创建本地的<myBranch>
git branch -d <myBranch>:删除名为myBranch的分支,如果分支中有未merge的提交(未push的commit),则删除失败
git branch -D <myBranch>:强制删除名为myBranch的分支
git branch -vv:查看HEAD所指本地分支对应的远程分支
git branch -m <oldName> <newName>:修改分支名称
git branch --contains <SHA/Commit id>:查看<SHA>所对应Revision所属分支

git checkout (操作文件和分支)

git checkout <myBranch>:将当前分支切换到<myBranch>分支,即HEAD指向<myBranch>
git checkout <fileName>:放弃对<fileName>文件的修改
git checkout .:放弃当前目录下的修改
git checkout -b <myBranch> <masterBranch>:在本地创建新分支,并切换到新创建的分支上

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

git branch <myBranch> <masterBranch>
git checkout <myBranch>

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

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

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


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

git reset HEAD <fileName>:撤销添加到暂存区的文件(只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全部撤销,慎重使用)

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

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

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

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

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

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

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

git log -n <num>:指定输出的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 <num>:查看所有分支的所有操作记录(包括已经被删除的commit记录和reset操作)
git reflog show <myBranch>:查看当前分支的源分支
git blame <fileName>:查看指定文件的修改记录,显示文件最后修改的版本和作者
git blame -L <start>,<end> <fileName>:查看指定文件,显示文件每行最后修改的版本和作者

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

git merge <feature> <master>:将feature分支的内容merge到master分支
git merge --continue:解决冲突后继续merge
git merge --abort:放弃当前的merge
git checkout <feature> -> git rebase master:将master的内容rebase到feature分支
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 <hostName> <branchName>:<myBranch> (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 <hostName> <branchName>:将本地的branchName分支推送到hostName远端仓库的branchName分支

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

git push
文件穿梭命令示意
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值