版本控制工具-git
SCCS:源代码控制系统
RCS:版本控制系统
CVS:并发版本控制系统(联网)
Git:分布式的版本控制系统
https://www.liaoxuefeng.com/wiki/896043488029600
廖雪峰 git使用
Linux目录配置
目录的四个类型为 可分享 不可分享 可变动 不可变动
git bash中
git status 显示当前文件夹仓库与当前文件夹之间那些文件被修改
git diff 显示当前文件夹下的文件 与 仓库中的文件之间的具体差异
两个指令的另外一个区别是:在修改过的文件,执行git add 指令之后,git diff不会显示任何内容、即比较的是当前文件夹文件与暂存区文件之间的区别,add后两者相同而不会显示任何内容 git status会显示文件被修改,此时字体为绿色(add前为红色)
而git commit 是会更新仓库内容
git用到的指令
git本地仓库 常用指令
pwd cd ls rm vim cat 等linux常用指令
git add xxx.xx //添加本地代码到暂存库
git commit -m "" //更新仓库内容 ""中写本次更新的log
git status //查看本地文件有无变化 是否有未处理任务
git diff //查看变化 区别见上
git log //查看commit代码的log 显示版本号(复杂的十六进制数字)
git reset --hard HEAD^ //回退到上一个版本
git reset --hard HEAD^^ //回退到上上个版本
git reset --hard *** //***为想要回退的版本号
git reflog //查询每一次仓库操作命令 及当时对应的版本号(用来查询版本号)
git checkout -- readme.txt //撤销对readme.txt的修改 让这个文件回到最近一次git commit或git add状态
1.修改没有被add 则退回上一次commit状态
2.修改被add 则退回上一次add状态
远程仓库常用操作
在建立本地与远程仓库链接之前 需要先对本地进行commit所有变化
//将本地仓库内容推送到GitHub仓库建立两个仓库间的链接// @github.com:tju-wang/learngit.git
git remote add origin git@github.com:tju-wang/learngit.git
//取消与远程仓库已经建立的链接
git remote remove origin
//将本地仓库所有内容推送到远程仓库 将当前分支master推送到远程
git pull origin master
//拉取远程仓库master分支 并合并到本地分支
git pull origin master --allow-unrelated-histories
//本地与远程仓库完全无关联时(均为独立创建 非clone关系) 使用上句
git push -u origin master //-u 参数 Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master //把本地master分支的最新修改推送至GitHub
GitHub创建好远程仓库 克隆远程仓库到当前
git clone git@github.com:michaelliao/gitskills.git
分支管理
创建分支
git checkout -b dev //-b 参数表示创建并切换 相当于一下两条指令
git branch dev
git checkout dev
//查看当前分支 当前分支前 会有*
git branch
//在当前分支下 add status commit 等操作 均是对于当前分支的 即*指向的分支
//切换回主分支
git checkout master
//将分支工作 合并到master上 更新master的操作
git merge dev
//合并(指针切换指向)后,可以删除掉dev分支
git branch -d dev
冲突
在分支上修改文件 在master也修改了同一个文件 且二者都进行了commit
在merge合并分支时,会有conflict导致合并失败
需要人为解决冲突后 再进行merge
git status 会显示文件冲突 查看冲突文件的内容 直接修改该文件 然后再提交
此时 master 分支 的该文件内容都会更新
可以使用
git log --graph --pretty=oneline --abbrev-commit //查看处理冲突修改的文件
分支管理策略
通常 团队协作开发时 master为release上线版本
dev为修改测试的beta版本
而每个人工作时 需要先clone最新内容 然后创建属于自己的分支 再修改代码
分支确认后 merge到dev上
Bug分支
处理的问题是,当前正在进行的开发未结束 又有新的任务 需要在master的基础上进行修改 -->譬如 release版本的bug修复问题
此时通过git提供的
git stash函数 保存当前的工作现场(在保存前需要add操作) 然后在需要修改的master目录下,创建bug修复分支
bug修复完毕 提交到master bug修复结束,返回dev分支(之前正在工作的分支)
git stash list //查看当前被保存的所有工作现场
git stash pop//恢复工作现场 并删除stash保护区域 --》多个工作现场时,用 git stash apply stash@{0} 分别操作
开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>强行删除。
//多人协作
git remote -v //查看远程库的信息
git push origin master //将本地仓库主分支推送到远程仓库
git push origin dev //将本地仓库 dev 分支推送到远程仓库
因此,多人协作的工作模式通常是这样:
首先,可以试图用
git push origin <branch-name>推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用
git push origin <branch-name>推送就能成功!如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set-upstream-to <branch-name> origin/<branch-name>。这就是多人协作的工作模式,一旦熟悉了,就非常简单。
Rebase //变基操作 将分差的提交图变为直线--》详询 Git Book
标签管理tag
tag是一个让人容易记住的有意义的名字,它跟某个commit绑定在一起
创建tag
在最近一次提交的commit上 进行打标签 切换回master分支
git tag v1.0.0
指定标签名字并附有文字说明 为1094adb的id打标签
git tag -a v0.1 -m "version 0.1 released" 1094adb
git tag //查看所有标签
git tag -d v0.1 //打错了 删除标签v0.1
git push origin <tagname> //可以推送一个本地标签
git push origin --tags //可以推送全部未推送过的本地标签
git push origin :refs/tags/<tagname> //删除一个远程标签
使用git 参与开源项目
1.Fork一个开源项目 此时在自己的git下也出现了同样的仓库
2.从自己的仓库拉取代码 修复bug或添加新功能
3.使用pull request 给官方仓库贡献代码
配置使git自动忽略一些文件(由编译器编译过程产生的中间文件、含有重要信息的文件、不希望被上传的文件等)
添加xxx.gitignore文件 在文件中写明文件格式
想提交给github符合忽略规则的某文件 要用
git add -f App.class // -f 关键字
git check-ignore -v App.class //查看.gitignore中 哪条规则屏蔽了APP.class文件 方便修改
配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
git命令可以配置别名
搭建Git服务器非常简单,通常10分钟即可完成;
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。