文章目录
- 前言
- 基础知识
- 集中式版本控制 - SVN
- 分布式版本控制 - Git
- 常用的Linux命令
- Git工作区域
- Git 常用命令
- 获取Git仓库
- 添加/提交/推送/删除/回退文件
- 查看信息
- Git分支
- Git标签
- Gitk:一个排查Git问题的工具
前言
git是用C语言开发的,以追求最高的性能。git自动完成垃圾回收,也可以用命令git gc --prune直接调用。
基础知识
集中式版本控制 - SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
分布式版本控制 - Git
每个人都拥有全部的代码。
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!
Git下载:https://git-scm.com/
Git Bash应用:Unix与Linux风格的命令行,使用最多,推荐最多;
Git GUI应用:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令;
GitK命令:内建的图形化 git,打开Git Bash进入相应的git仓库输入gitk即可。
常用的Linux命令
cd 进入目录
cd .. 回退上一个目录
pwd 显示当前所在目录路径
ls(ll) 列出当前目录中所有文件,后者更为详细(加-al查看隐藏文件)
touch 新建一个文件如touch test.txt就会在当前目录下新建test.txt文件
rm 删除一个文件如rm test.txt就会删除当前目录下的test.txt文件(加-rf删除文件夹无需确认)
mkdir 新建一个文件夹
Git工作区域
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、本地仓库、远程仓库(Remote Directory)
Workspace:工作区,就是你平时存放项目代码的地方;
Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息;
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;
Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。
日常使用要记住上图6个命令 + review操作:
git clone - 克隆
git checkout - 检出
git add - 增加
git commit - 提交
git push - 推送
git pull --rebase - 拉取
git review branch_name - review
团队内会有一位Code reviewer,负责代码管理的,团队成员一般执行完git commit之后,不会自己手动执行git push,而是执行git review,而后有reviewer检验完代码后,进行git push。
Git 常用命令
获取Git仓库
当前目录新建一个Git代码库
$ git init
从远程克隆
$ git clone 远程Git仓库地址
$ git clone -b 分支名 远程Git仓库地址
显示所有远程仓库
$ git remote -v
添加远程仓库
$ git remote add 名称 url地址
$ git remote add origin git@github.com:XXX/XXX.git
移除远程仓库 - 只是在本地移除记录,并不会影响远程仓库
$ git remote rm 名称 (一般是origin)
从远程拉取代码
$ git pull 名称 (一般是origin) 分支名 (master分支)
$ git pull 名称 分支名 --allow-unrelated-histories
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
**
解决连接远程仓库出现ssl认证问题
$ git config --global http.sslVerify “false”
测试一下通不通
$ ssh -T git@github.com
添加/提交/推送/删除/回退文件
添加指定文件到暂存区,如果是多个文件,使用空格分隔
$ git add 文件 文件 …
当前目录及其子目录的文件都加入到暂存区
$ git add .
代码从暂存区提交到本地仓库
$ git commit -m “描述信息”
**本地推送到远程仓库
$ git push 名称 (一般是origin) 分支名 (master分支)
第一次提交
$ git push -u origin 分支名
需要输入用户名和密码
删除文件
$ git rm 文件
将暂存区文件取消暂存
$ git restore --staged 文件
将本地仓库文件回退到上个版本
$ git reset --hard HEAD^
回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard HEAD~3
退到/进到 指定commit的sha码,提交ID可使用git log查看
$ git reset --hard 提交ID
查看信息
查看文件状态
$ git status
查看文件修改哪些内容
$ git diff
查看日志记录
$ git log
查看当前分支的版本历史
$ git log
搜索提交历史,根据关键词
$ git log -S 关键词
显示指定文件是什么人在什么时间修改过
$ git blame 文件
显示今天你写了多少行代码
$ git diff --shortstat “@{0 day ago}”
显示当前分支的最近几次提交
$ git reflog
显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
Git分支
查看本地分支
$ git branch
查看远程分支
$ git branch -r
查看远程全部分支
$ git branch -a
创建分支
$ git branch 分支名
切换分支
$ git checkout 分支名
将本地分支推送到远程仓库
$ git push orighn 分支名
合并分支
$ git merge 分支名
例子:将b分支合并到a分支下
$ git checkout a
$ git push orighn b
删除分支
$ git branch -b 分支名
强制删除
$ git branch -D 分支名
删除远程仓库分支
$ git push orighn -b 分支名
代码冲突解决
打开冲突文件并修复冲突内容,最后执行git add命令
Git标签
创建标签
$ git tag 标签名
查看标签
$ git tag
查看信息
$ git show 标签名
将当前标签推送远程仓库
$ git push origin 标签名
检出标签 - 在新的基础上创建新的分支再进行开发
$ git checkout -b 新的分支名 标签名
删除本地标签
$ git tag -d 标签名
删除远程仓库标签
$ git push origin :refs/tags/远程仓库标签名
Gitk:一个排查Git问题的工具
gitk是一个非常强大的图形化工具,现在安装git会自带gitk的应用程序,在代码库的根目录下直接输入gitk会打开这个界面:
gitk的主界面主要包含5个部分:
- 主菜单栏显示区
- 提交信息显示区,显示提交的基本信息,包括节点树、message、提交人和提交时间
- 查询条件检索区,根据检索条件查找的窗口
- 具体内容显示区,显示 commit 的变更记录或两个 commit 的 diff 内容
- 文件列表显示区,显示的commit的文件列表或两个commit的diff文件列表
每个点代表一次提交,线代表父子关系,而彩色的方块则用来标示一个个引用。 黄点表示 HEAD,红点表示尚未提交的本地变动。