背景
在从事程序设计的学习工作中,常常需要对同一场景设计多个不容版本的程序代码以及产品的持续更新和维护,而且开发者往往不止一人,尤其是在公司往往是一个研发团队一起共同开发,针对这样的情况就必须需要一个代码管理工具来对不同版本的代码能够管理更新和回溯。Git就是一个最普遍使用的也是最先进的分布式版本控制系统。
1. Git工作原理
git 的工作原理图如上图所示,主要由workspace(工作区)、Index(缓存区)、Repository(本地仓库)、Remote(远程仓库)组成。
2. Git安装
apt-get install git
3. Git基本操作
(1) 查看配置信息,配置用户名和电子邮箱
git config --list
git config --global user.name "Tony Wey"
git config --global user.email tonywey@yyds.com
(2) 创建并初始化仓库
git init
创建好仓库后,可以在此文件夹里面随意生成代码。
(3) 查看仓库状态
git status
可以看到本地仓库里出现的代码文件,注意此时分两种状态的文件,红色文字显示的文件是只在本地添加并未提交的文件,绿色文字显示的文件是在本地并已经添加进git仓库中的文件。
(4) 添加文件到仓库
git add filename/ -- all
(5) 提交文件到仓库
git commit -m '任意内容'
(6)推送到远程仓库
git push remoteName localBranchName
(7)拉取到本地仓库
git pull remoteName localBranchName
(8)版本控制
git log # 查看提交历史记录,从最近到最远,可以看到3次
git log --pretty=oneline #简洁查看
git reflog #查看每一次修改历史
cat test.txt #查看文件内容
git reset --hard HEAD^ #回退上一个版本
git reset --hard HEAD^~2 #回退前两个版本
git reset --hard version_id #回退到指定版本号
git checkout -- test.txt #丢弃工作区的修改,即撤销修改
git reset HEAD test.txt #丢弃暂存区的修改(若已提交,则回退)
(9)文件删除
git rm test.txt
git commit -m "delete test.txt"
git checkout -- test.txt #恢复文件
(10) 远程仓库
ssh-keygen -t rsa -C "tonywey@yyds.com" #创建SSH Key
git remote add origin git@github.com:Daisy/AKgit.git /#关联
git push -u origin master #将本地内容推送到远程仓库(第一次)
git push origin master #将本地内容推送到远程仓库(之后每一次)
git remote -v #查看远程仓库信息
git remote rm origin #删除远程仓库(解绑)
git clone gitid #克隆远程仓库
git remote #查看远程库的信息
git remote -v #查看远程库的详细信息
(11) 工程协作操作
git checkout -b dev #创建并切换到分支dev
git branch dev #创建
git checkout dev #切换
git switch -c dev #创建并切换到分支dev
git switch master #直接切换分支
git branch #查看当前分支
git merge dev (--no-ff)(-m) #合并,把dev分支的工作成果合并到master分支上
git branch -d dev #删除dev分支
git stash #将现场储藏起来
git stash list #查看储存的工作现场
#恢复和删除
git stash apply
git stash drop
#恢复并删除
git stash pop
git cherry-pick 4c805e2 #复制修改
git push origin master(dev) #推送分支
git checkout -b dev origin/dev #创建远程origin的dev分支到本地
git pull #拉分支(解决冲突)
git branch --set-upstream-to=origin/dev dev #指定本地与远程dev的链接
git rebase #把本地未push的分叉提交历史整理成直线
(12) 管理标签
git tag v1.0 #打标签
git tag -a v0.1 -m "version 0.1 released" #指定标签名和说明文字
git tag #查看所有标签
#如果忘记打标签,则查找历史提交commit id ,再打上
git log --pretty=oneline --abbrev-commit
git tag v2.0
git show v2.0 #查看标签详细信息
git tag -d v1.1 #删除标签
git push origin v1.0 #推送标签到远程
git push origin –tags #一次性推送全部本地标签
#删除标签,(若已推送到远程,先从本地删除,从远程删除)
git tag -d v0.9
git push origin :refs/tags/v0.9
(13) 子模块使用
git submodule add git_id # 添加子模块
git submodule update --init --recursive # 初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令