Git和SVN都是常用的版本控制工具,但是二者相比,Git优点更明显。
Git是分布式的,不依赖中心服务器的远程仓库,远程仓库可以用于团队之间的代码交流同步,但是服务器或远程仓库崩了,本地开发版本提交不受影响,成员间需要同步代码时,基于现有的本地库重新搭建一个远程仓库即可。但是SVN中心服务器一崩,你就再也没办法提交版本了。类似的还有没有网络等场景,Git都可以完美发挥作用。
1、图示
(1)总体图示
(2)团队内部协作(同一远程库)
(3)团队间协作(多个远程库)
2、常用命令
(1)初始化与版本提交
#安装完git软件,设置全局的用户名及邮箱
git config --global user.name "phs999"
git config --global user.email "peihesun@163.com"
git init #初始化工作区
git add #将更改添加到暂存区
git commit -m "提交说明" 提交的文件 #将暂存区的内容提交到本地版本库
#只要有文件新建或修改,但并没有commit到本地库,则可以通过status查看追踪到。
git status
#查看提交的日志记录
git reglog
(2)重置与版本回滚
git reset --hard 7e3b663 前进或后退到某个版本
从暂存区恢复删除的数据 或者从本地库恢复重置数据 都可以使用该命令实现
reset命令的hard mixed soft 参数
hard:本地库的指针移动的同时,重置暂存区,重置工作区
mixed:本地库的指针移动的同时,重置暂存区,工作区不变
soft:本地库的指针移动的同时,暂存区和工作区都不变
(3)比对文件差异
git diff [文件名] 比较单个特定文件 在工作区和暂存区的差异
git diff 不带文件名,则比对工作区和暂存区的所有文件差异
git diff 本地库版本号 [文件名] 比较工作区和本地库特定版本之间的差异
和最近一次提交的记录做比对的话,版本号可以直接写HEAD
即git diff HEAD Test3.txt
(4)分支
同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率
如果有一个分支功能开发失败,直接删除这个分支就可以了,不会对其他分支产生任何影响。
查看分支
git branch -v
新建分支
git branch newbranch
切换分支
git checkout newbranch
$ git branch b1
phs@DESKTOP-V9 MINGW64 /d/code/github/gittest (master)
$ git branch -v
b1 12e7455 添加了Test4.txt
* master 12e7455 添加了Test4.txt
phs@DESKTOP-V9 MINGW64 /d/code/github/gittest (master)
$ git checkout b1
Switched to branch 'b1'
phs@DESKTOP-V9 MINGW64 /d/code/github/gittest (b1)
$ git branch -v
* b1 12e7455 添加了Test4.txt
master 12e7455 添加了Test4.txt
分支冲突处理
出现冲突的原因是因为不同分支修改了同一文件的相同位置。
当前分支为b1,修改并提交内容,
然后切到master分支,此时工作区文件也变为master分支的内容,在b1分支时进行的工作区变更被重置了。
git checkout master
然后再次修改,并修改
再次切换分支至b1
git checkout b1
此时工作区文件内容变为b1分支的内容。
将b1分支合并到master分支上
首先切换到master分支
git checkout master
然后 git merge b1
merge不成功的话,需要手动处理(修改工作区的冲突内容),然后提交,此时commit不能带文件名
(5)远程库
远程库交互
创建github账户 创建远程仓库
create a new repository on the command line、
echo "# gittest2" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/phs999/gittest2.git git push -u origin master
push an existing repository from the command line
git remote add origin https://github.com/phs999/gittest2.git
git push -u origin master
因为远程库地址过长,所以使用起别名的方式
git remote add origin https://github.com/phs999/gittest2.git
查看别名 git remote -v
推送到远程库
git push的一般形式为 git push <远程库别名> <本地分支名> <远程分支名>
git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push
如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,
可以使用git branch -r ,查看远程的分支名
git push -u origin master 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,
git push --all origin 当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项
使用远程库资源在本地建立工作区(把远程库的内容初始化到本地)
git clone https://github.com/phs999/gittest2.git
pull=fetch+merge
fetch将远程库更新内容拉取到本地,但不更新工作区
需要merge。可以先切换到远程库的主分支查看最新的内容,判断正确后再merge.
git checkout origin/master 远程
git checkout master 本地