Git使用指南(三)
1、分支管理:
1.场景:假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险
2.创建与合并分支:
创建分支:
git checkout -b <name> // 创建并切换分支
相当于:
git branch <name>
git checkout <name>
git branch 查看所有分支
合并分支:
git merge <name> // 合并指定分支到当前分支
删除分支:
git branch -d <name>
3.解决冲突:
当git无法自动合并分支时,就必须首先解决冲突,冲突解决之后再提交,合并完成
git log --graph --pretty=oneline --abbrev-commit 查看分支合并图
4.分支管理策略:
使用普通模式进行合并,在合并时加上--no--ff参数即可,合并后的历史有分支,
而使用fast forward就看不出曾经做过合并
git merge --no-ff -m "merge with no-ff" dev
5.bug分支:
每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除
当需要修复bug,保存当前尚未完成的任务: git stash
修复bug完成后重新打开保存的工作区:
查看工作区: git stash list
恢复工作区:
git stash apply 恢复后stash的内容并不删除,使用git stash drop进行删除
git stash apply 恢复的同时,将stash的内容也删除了
可以多次stash,恢复的时候先 git stash list,再恢复指定的stash:
git stash apply stash@{0}
6.Feature分支
场景:添加新功能后,已commit,但是尚未合并,需要销毁分支
git branch -d <分支名称> 此时删除,将会丢失修改
进行强制删除:git branch -D <分支名称>
注:
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
7.多人协作:
查看远程库信息:git remote -v
推送分支:(把该分支上的所有本地提交推送到远程库)
git push origin master 或者 git push origin dev
是否推送:
master是主分支,需要时刻与远程同步
dev是开发分支,需要与远程同步
bug分支只用于本地修复bug,不需要推送
feature不一定推送
多人协作模式:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,说明本地分支和远程分支的链接关系
没有创建,使用git branch --set-upstream branch-name origin/branch-name
2、标签管理:
1.标签相当于版本库的快照,其实是指向某个commit的指针,且是不可以移动的,创建和删除标签都是瞬间完成的
2.创建标签:
首先切换到需要打标签的分支上:git checkout branch_name
打标签: git tag <标签名>
默认标签是打在最新提交的commit上的(HEAD),如果需要对历史提交打标签:
git tag <标签名> commit_id
标签不是按时间顺序列出,而是按字母排序的
查看标签信息:
git show <标签名>
创建带有说明的标签:
git tag -a <标签名> -m "说明文字" -s 私钥签名一个标签
查看所有标签:
git tag
3.操作标签:
删除标签: git tag -d <标签名>
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
推送标签到远程:
git push origin <标签名>
一次性推送全部尚未推送到远程的本地标签:
git push origin --tags
删除远程标签:
先从本地删除:
git tag -d <标签名>
再从远程删除:
git push origin :refs/tags/<标签名>
3、使用Github:
clone 代码
pull request
4.自定义Git:
1.让Git显示颜色:
git config --global color.ui true
2.忽略特殊文件:
在Git工作区的根目录下创建一个特殊的.gitignore文件
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
添加被.gitignore文件忽视的文件:git add -f <文件名>
查看.gitignore文件是否有问题:git check-ignore -v <文件名>
3.配置别名:
git config --global alias.st status // 使用st 代表status
配置git时,加上--global,针对当前用户起作用,否则只对当前仓库起作用
每个仓库的配置文件都存放在.git/config
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置
4.搭建Git服务器:
1)在Linux机器上安装git,使用sudo账号:
sudo apt-get install git
2)创建一个git用户,用来运行git服务:
sudo adduser git
3)创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
4)初始化Git仓库:
sudo git init --bare sample.git
服务器上的Git仓库通常都以.git结尾。然后,把owner改为git
sudo chown -R git:git sample.git
5)禁用shell登录:
编辑文件:/etc/passwd,将git:x:1001:1001:,,,:/home/git:/bin/bash修改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6)克隆远程仓库:
git clone ...
管理公钥:
Gitosis工具
管理权限:
编写一系列的脚本控制权限
Gitolite工具
Git官网:http://git-scm.com