Git是什么?
Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更新和协同开发。甚至有时,中央服务器磁盘故障,恰巧又没有做备份或备份没及时,那就可能有丢失数据的风险。
但Git是分布式的版本控制系统,客户端不只是提取最新版本的快照,而且将整个代码仓库镜像复制下来。如果任何协同工作用的服务器发生故障了,也可以用任何一个代码仓库来恢复。而且在协作服务器宕机期间,你也可以提交代码到本地仓库,当协作服务器正常工作后,你再将本地仓库同步到远程仓库。
为什么要使用Git
能够对文件版本控制和多人协作开发
拥有强大的分支特性,所以能够灵活地以不同的工作流协同开发
分布式版本控制系统,即使协作服务器宕机,也能继续提交代码或文件到本地仓库,当协作服务器恢复正常工作时,再将本地仓库同步到远程仓库。
当团队中某个成员完成某个功能时,通过pull request操作来通知其他团队成员,其他团队成员能够review code后再合并代码。
Git有哪些特性
文件三种状态(modified, staged, committed)
直接记录快照,而非差异比较
多数操作仅添加操作
近乎所有操作都是本地执行
时刻保持数据完整性
Git基本工作流程
1.在git版本控制的目录下修改某个文件
2.使用git add命令对修改后的文件快照,保存到暂存区域
3.使用git commit命令提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中
安装完成后,还需要最后一步设置,在命令行输入:
$git config --global user.name
"Your Name"
$git config --global user.email
"[email protected]"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
Git版本控制
创建仓库
git init
git clone
git config
保存修改
git add
git commit
查看仓库
git status
git log --oneline
撤销修改
查看之前的commit
git checkout <commit> <file>
git checkout <commit>
git checkout <branch>
撤销公共修改
git revert <commit>
撤销本地修改
git reset
git clean
重写Git历史记录
git commit --amend
git rebase
git reflog
Git协作开发
分支
git branch
git checkout
git merge
仓库同步
git remote
git fetch
git pull
git push
何时发生冲突:在开发者发布它们功能之前,他们需要fetch远程仓库已更新的commit到本地仓库和rebase到已更新的commit的上面。有时,本地提交与远程提交会发生冲突,git会暂停rebase过程来让你手动解决冲突。
如何解决冲突:你可以使用git status和git add来手动解决合并时冲突。
1. 仍然使用远程仓库(central repository)和主分支(master branch)仍记录官方工程的历史
2. 开发者每次开发新功能时都创建一个新分支 --- git checkout -b
3. Feature branches应该推送到远程仓库(central repository) --- git push
4. 发送pull request来请求管理员能否合并到主分支(master branch)
5. 发布新功能到远程仓库(central repository)