Git 简介
Git是目前最先进到分布式版本控制系统,是由Linux创始人Linus于2002年开发出来。起初Linus开发git是为了方便合并世界各地Linux志愿者发给他的代码,但是发布后git迅速成为最流行的分布式版本控制系统。2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
Git的原理
image
- 工作区(Working Directory)可以理解为本地电脑的目录,包含.git文件。
- 版本库(Repository)可以理解为一个用来记录仓库文件夹内每一次变化的一个库。
Git的常用操作
Git的操作主要围绕以下几点:
- 从git取数据
- 将改动传回git
- 版本文件管理
- 分支管理
- 标签管理
从git取数据
git clone
在Github上选择我们需要克隆到本地的仓库,找到对应的SSH链接。
image使用git clone git@github.com:MaxYanDD/test.git
将远程仓库克隆到本地。
远程仓库文件被下载到本地。
git pull和git clone的区别
- git clone 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是将一个库复制到你的本地,是一个本地从无到有的过程。
- 从远程服务器获取到一个branch分支的更新到本地,并更新本地库,叫做pull.(pull是指同步一个在你本地有版本的库内容更新的部分到你的本地库)
git pull相当于是从远程获取最新版本并merge(合并)到本地 git pull = git fetch + git merge,git fetch更安全一些。
将改动传回github
我们对clone下来仓库中的文件进行修改后,使用git status
可以查看当前的修改信息。
使用git diff
查看修改了哪些地方。
根据提示我们还可以使用git checkout -- README.md
撤销这次修改。
检查修改无误后,我们开始将我们的修改推送到github:
第一步.使用命令git add README.md
,将修改文件放入暂存区。
第二步.使用命令git commit -m "修改了第一行"
,将文件提交到版本库。参数-m
后面为本次修改的描述。
第三步.使用git remote add origin git@github.com:MaxYanDD/test.git
命令将本地仓库和Github远程仓库进行关联。
第四步.使用git push -u origin master
将本地库内容推送到远程仓库。
在github仓库中可以看到本体修改已经生效了。
版本文件管理
版本号
当需要进行版本回退前,我们可以先使用git log
,git log --pretty=oneline
或者git reflog
来查看从最近到最远的提交日志,并找到版本号。
版本修改
需要对版本进行修改时可采用下列命令:
git reset --hard HEAD^ ##回退至上一个版本
git reset --hard HEAD^^ ##回退至上上个版本
git reset --hard HEAD~100 ##往上回退至第100个版本
git reset --hard 版本号 ##回退到指定版本号
文件删除
- 当本地删除文件时,可以使用
git checkout -- a.html
来恢复。 - 当本地删除问加,且仓库的也想删除时,需要通过
git rm a.html
,并且git commit -m "rm"
。
撤销删除
git checkout -- filename ## 撤销修改回到和版本库一模一样的状态。
git reset HEAD filename ## 暂存区的修改回退到工作区
分支管理
通过创建分支,可以同时在多个分支同时进行开发。类似于鸣人学习螺旋丸,开挂一般。
- 常用命令
git branch ##查看分支
git branch dev ##创建dev分支
git checkout dev ##切换到dev分支
git checkout -b dev ##创建并切换到dev分支等于上面两步
git merge dev ##将dev分支合并到当前分支
git branch -d dev ##删除dev分支
git branch -D dev ##强项删除dev分支
- 实践操作
- 冲突解决
当两个分支对同一个文件修改后,有可能产生冲突这个时候合并后冲突部分都会保留,需要手动编辑并提交。冲突的判定应是行为粒度。
使用git log --graph --pretty=oneline
可以更为形象的查看分支冲突
- 分支策略
master用来发布版本,开发一般在dev分支以及其他分支上。
- Bug分支
修复bug时需要,建一个临时分支。
当有开发未完成时,可使用git stash
保存当前工作,BUG修复完成后,回到当前分支在git stash pop
恢复。
- 多人协作
当通过git clone
将远程仓库clone到本地时,Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。但是如果在dev分支下开发的话,则不存在对应关系,需要通过git branch --set-upstream-to=origin/dev dev
将本地dev分支和远程dev分支进行关联。
标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。Git的标签是版本库的快照,其实它就是指向某个commit的指针。
常用操作如下:
git tag v1.0 #标签1.0打在最新的commit上
git tag -a v0.1 -m "version0.1 released 0affebc ## 创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -d v0.1 ## 删除标签v0.1
git push origin :refs/tags/v0.9 ###删除远程标签
git push origin v0.1 ## 推送v0.1标签到远程
git push origin --tags ##一次性推送全部尚未推送到远程的本地标签
网友评论