git和svn区别
1.git是分布式版本管理,svn是集中式版本管理
2.集中式版本管理: 版本库放在中央仓库(中央服务器),首先你得从中央仓库中获取最新的版本,然后再对文件或者代码进行操作,最后再把你修改的结果推送到中央服务器中。集中式版本管理最大问题就是需要联网才能进行操作,所以提交文件的速度很大程度上取决于网速,而且在局域网和互联网速度影响也挺大的。
3.分布式版本管理: 分布式版本管理没有中央仓库,每个人的电脑都是完整的版本库,这样在你工作的时候就不需要联网,因为版本库就在你的电脑上,如果进行多人合作的话,只需要把你的修改直接推送给别人就好,这样就能直接看到别人的修改。但是在实际的开发中,很少有人会进行推送,因为你们很有可能不在一个局域网下,所以通常也会有一台机器充当中央服务器的机器,但是这个机器仅仅充当大家修改的交换,即使没有它,大家一样能够干活,只是交换和修改不方便。
创建版本库,并提交文件到本地仓库
1.配置git仓库的用户名和邮箱,相当于git用户身份
# git config --global user.name "administrator" # git config --global user.email "[email protected]"
2.创建版本库
# mkdir testGit : 新建文件夹 # cd testGit # git init : 创建本地版本库
在windows系统中打开显示隐藏文件的选项,可以看到.git的目录,这个目录就是git用来管理版本库的,不要随意修改.git中内容,容易破坏版本库。
3.把文件加载到暂存区中
# git add xxx (xxx代表文件名)
4.把暂存区中的文件保存到git版本库中
# git commit -m "infomation" (双引号中的信息是你想要提交的备注信息)
版本回退
1.查看版本提交日志记录
# git log
2.回退到上一个版本
# git reset --hard HEAD^
3.当然你也可以回退到任意的某个版本
# git reset --hard HEAD~X : X表示回退到第X个版本
4.同样你可以使用git log查看各个版本代码,然后回退到某个版本
# git reset --hard 321909 : 321909代指版本号
工作区和暂存区
版本库: 工作区中有一个隐藏文件.git,这就是版本库
工作区: 就是你文件真实的文件目录
暂存区: 在你git add的时候,文件先被保存到暂存区中,然后通过git commit保存到版本库中
我们可以通过查看 git status 查看git版本库状态
撤销修改
1.文件还没有提交到暂存区和版本库中,相当于撤销工作区的修改
# git checkout -- fileName
2.假如文件已经提交到暂存区中,步骤得分2步
# git reset HEAD XXX(XXX为文件名) # git checkout -- XXX(XXX为文件名)
远程仓库
一.先有本地库,再有远程库
1.把本地代码上传到远程库
# git remote add origin [email protected]:path/repo-name.git
2.推送代码到远程库
# git push origin master
二.假如已经有了远程库
拉取代码到本地
# git clone URL (URL为远程地址)
git分支管理
原理: 分支指针指向每一次提交内容,mater指针指向最新的提交,HEAD指向当前分支,例如最开始指向master,当创建新的分支并切换新的分支时,Head指针会指向新的分支。
合并分支的原理:假如我们在DEV分支上开发了代码,然后想要合并到master分支,最简单最直接的方法就是直接把master指针指向DEV分支最新的提交就可以了,当然这是在没有冲突的前提下,有冲突的话还得先去解决冲突。
合并分支的过程有2种模式:
1.fast forward模式
2.no Fast forward模式
这两种模式的区别是:no Fast forward合并后可以看到在历史中分支的信息,知道曾经合并过分支,而fast forward模式并不记录改信息,git默认会使用fast forward模式。
Bug分支
当你新建分支,然后这个分支用来修改Bug,但是你突然有新的任务,需要新建分支继续干其它的活,你可以先把你的bug分支所做的事情先隐藏,然后等你完成其它的任务,再来bug分支进行工作。
1.把当前工作现场‘隐藏‘起来
# git stash
2.恢复工作现场有2种方法
# git stash apply : 恢复,但是恢复后,stash内容不删除,你需要用git stash drop来删除 # git stash pop : 恢复的同时把stash内容也删除
3.查看stash内容空间
# git stash list
4.恢复指定的stash空间
# git stash apply [email protected]{0}
git标签管理
1.打一个新的标签
# git tag name
2.查看所有的标签
# git tag
默认的标签是在最新的提交上commit的,如果有时候,忘了打标签,比如现在已经是周五了,但是应该是周一打的标签没有打这么办,方法是找到历史提交的commit id,然后打上就可以了,查看历史记录。
# git log --pretty=oneline --abbrev-commit
注意: 标签不是按照时间顺序列出的,而是按照字母排序的,可以用git show tagname 查看标签信息
3.查看标签信息
# git show tagName
4.创建带有说明的标签,用-a指定标签名,-m指定说明文字
# git tag -a v0.1 -m "version 0.1 released" 3628164
5.删除标签
# git tag -d v0.1
因为创建的标签都是储存在本地,不会自动推送到远程,所以打错标签可以在本地删除
6.推送标签到远程
# git push origin tagname
7.一次性推送所有标签到远程
# git push origin --tags
8.如果标签已经推送到远程,要删除远程的标签
# git tag -d tagName : 本地删除文件 # git push origin : refs/tags/tagName : 删除远程标签
git 切换远程分支
# git branch -a 查看分支全部关联列表 # git checkout -b develop origin/develop : 切换并关联远程分支 # git checkout develop # git branch -vv : 查看本地分支与远程分支关联情况
常用命令整理
# git init : 把当前的目录变成可以管理的git仓库,生产隐藏.git文件 # git add xxx : 把xxx文件添加到暂存区去 # git commit -m "xxx" : 提交文件-m后面是注释 # git status : 查看仓库状态 # git diff xxx : 查看xxx文件修改哪些内容 # git log : 查看历史记录 # git reset --hard HEAD^或git reset --hard HEAD~X:回退到上x版本 # cat xxx : 查看xxx文件内容 # git checkout -- xxx : 把xxx文件在工作区的修改全部撤销 # git rm xxx : 删除xxx文件 # git remote add origin https://github.com/learn/testgit : 把本地代码上传到远程仓库 # git push –u(第一次要用-u 以后不需要) origin master : 把当前master分支推送到远程库 # git clone https://github.com/learn/testgit : 从远程库中克隆 # git checkout –b dev :创建dev分支 并切换到dev分支上 # git branch : 查看当前所有的分支 # git merge dev : 把dev分支合并到当前分支中 # git branch –d dev : 删除dev分支 # git branch xxx : 创建分支 # git stash : 把当前的工作隐藏起来 等以后恢复现场后继续工作 # git stash list : 查看所有被隐藏的文件列表 # git stash apply : 恢复被隐藏的文件,但是内容不删除 # git stash drop : 删除文件 # git stash pop : 恢复文件的同时,也删除文件 # git remote : 查看远程库的信息 # git remote –v : 查看远程库的详细信息 # git log --graph --pretty=oneline --abbrev-commit : 查看分支合并的详情 # git config --global alias.co checkout : 配置别名 # git push origin tagName : 可以推送一个本地标签 # git push origin --tags : 可以推送全部未推送过得本地标签 # git tag -d tagName : 删除一个本地标签 # git push origin :refs/tags/tagName : 删除一个远程标签 # git branch -D xxx : 强行删除某个分支