分支管理
- 分支的做用
- 提交不完整的代码到主分支上会致使别人不能正常开发
- 若是等代码所有写完再提交,存在丢失天天进度的风险
详见:https://segmentfault.com/q/1010000010105733
- 新建与分支合并
- 过程
- Git 建立分支(例:dev) 除了增长一个dev指针外,让HEAD指向dev,工做区的文件没有变化
- 而后对工做区的修改和提交就是针对dev分支(HEAD指向的分支)
- 分支合并,直接将master指向dev的当前提交
- 而后能够将dev分支(dev指针)删掉
- 命令,例:
建立分支
建立dev分支并切换到dev分支html
git checkout -b dev
上面的命令至关于git
git branch dev
git checkout dev
切换分支github
git checkout master
- 合并指定分支到当前分支
- 正常合并
git merge dev
- 若是在这个过程以前 主分支上面的代码也被你的同伴修改过,这样会出现冲突,这时候使用 git status 能够查看一下冲突的文件,而后能够去该文件中将Git <<<<<,=====,>>>>>> 标记出的不一样分支的内容,解决完冲突后保存,而后再进行提交一次便可
合并完成后能够删除dev分支数据库
git branch -d dev
查看分支segmentfault
git branch
若是没有合并分支就要把分支删除,可使用:app
git branch -D 分支
注:
- 合并分支时,Git通常默认使用 Fast forward 模式,删除分支后,会丢掉分支信息
- 使用 git merge --no-ff -m"comment" dev 会在merge分支的时候生成一个新的commit,能够从分支历史上看出分支信息
- 常见分支策略
- master 分支是很是稳定的,仅用来发布新版本
- dev 分支是不稳定的,在dev上干活
- 在往下面创建一些本身的分支
- Bug分支
场景:当工做进行到一半,没办法提交,忽然接到一个要在两个小时解决一个bug的通知
使用 stash功能将当前工做现场保存起来测试
git stash
- 却换到须要修复Bug的分支,如(master),新建一个临时分支
- 而后修改Bug,提交到临时分支上
- 确认Bug分支没问题的话,能够却换回master分支,而后合并Bug分支
- 最后删除Bug分支
找回刚刚保存起来的工做场景,命令:网站
git stash list
#显示 stash@{0}: WIP on dev: 6224937 add merge
而后恢复以前的工做场景,两种方法:
- git stash apply stash@{0} 恢复后stash内容并不删除
- git stash pop stash@{0} 恢复的同时将stash删除了
- Feature分支
- 就是针对要开发的功能新建一个功能分支,开发完成后,完成合并后将该功能分支删除
- 本地与远程
- 当从远程库克隆的时候,Git自动将本地的master分支和远程的master分支对应起来,远程仓库的默认名称是origin
- 查看远程库的信息用 git remote -v
- 推送分支
经测试,无论你提交时在哪一个分支,若是执行 git push origin master 时 会将本地的master分支推送到远程的master分支,若是执行 git push origin dev 时 ,会将本地发dev分支推送到远程的dev分支,可是若是在dev分支上 执行 git pull origin master 时,会吧master分支上的内容拉下来而且与当前的分支合并
- 若是git pull 提示提示“no tracking information”,则说明本地分支和远程分支的连接关系没有建立,用 git branch --set-upstream branch-name origin/branch-name。
- 多人协做的工做模式:
- 首先尝试 git push origin branch-name 推送本身的修改
- 若是推送失败,则由于远程分支比你的本地更新,须要先用git pull 视图合并
- 若是合并有冲突则解决冲突,并在本地提交
- 没有冲突或者解决掉冲突后,使用 git push origin branch-name 推送
- 远程分支管理
- 推送本地分支 dev 到 远程分支 dev 并创建关联关系
- 远程已经有dev 而且已经关联本地分支dev 使用 git push
- 远程已经有dev 可是未关联本地dev 使用 git push -u origin/dev
- 远程没有dev分支 使用 git push origin dev:dev
- 删除远程分支 (远程分支删除后本地分支还在)
执行下面两条命令
- git branch -r -d origin/branch-name #删除对分支的追踪
- git push origin :branch-name #删除远程分支
标签管理
在发布版本的时候,能够在版本库中打一个标签,这样就惟一肯定了打标签时刻的版本。在须要的时候可取某个标签的版本。标签至关因而版本库的一个快照,能够自定义标签名字,便于查找操作系统
- 管理标签
建立标签
git tag tag_name
上面的命令默认是打在最新提交的commit上的,若是有时候忘记打标签的话,能够找到历史提交的commit id 而后打上标签便可
git tag tag_name commit_id指针
能够建立带有说明的标签,用 -a 指定标签名,-m 指定说明文字
git tag -a
-m "blablabla..."
还能够经过 -s 用私钥 签名一个标签:
git tag -s
-m "blablabla..."
签名采用PGP签名,所以,必须首先安装gpg(GnuPG),若是没有找到gpg,或者没有gpg密钥对,就会报错
- 查看标签
- 用git show tag_name 查看标签的说明
- git tag 查看全部标签
- 删除标签
git tag -d tag_name
- 远程标签
建立的标签默认只存储在本地,不会自动推送到远程
- 推送某个标签到远程
git push origin tag_name
- 一次性推送所有还没有推送到远程的本地标签
git push origin --tags
- 若是标签已经推送到远程,要将远程标签删除
- 先将本地标签删除 #这个其实能够不作
git tag -d tag_name
- 从远程删除
git push origin :refs/tags/tag_name
忽略特殊文件
有些文件放在Git工做目录中,可是又不能提交它们,不如数据库密码等配置文件,可是每次git status的时候都会显示好多 Untracked files ... , 这能够经过在Git 工做目录中建立一个 .gitignore 文件,而后把要忽略的文件名填进去,Git就会自动忽略这些文件
.gitignore 参考 : 见GitHub的示例
忽略文件的原则:
- 忽略操做系统自动生成的文件,好比缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是若是一个文件是经过另外一个文件自动生成的,那自动生成的文件就不必放进版本库,好比Java编译产生的.class文件;
- 忽略你本身的带有敏感信息的配置文件,好比存放口令的配置文件。
配置别名
咱们有时候在面对很是长的命令会头疼,这时候能够给这些命令配置一个别名,这样就可使用别名来进行相关操做了
命令:git config --global alias.别名 原名 # 注意,当原名是一个单词的时候不须要加引号,若是超过了一个单词,原名就须要用单引号包括
例:
git config --global alias.st status
执行过以后,下次再须要执行 git status 时就能够直接输入 git st 便可
示例:
git config --global alias.unstage 'reset HEAD'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
注意:
- 配置Git的时候,加上--global是针对当前用户起做用的,若是不加,那只针对当前的仓库起做用。
- 每一个仓库的Git配置文件都放在.git/config文件中,当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
- 配置别名也能够直接修改这个文件,若是改错了,能够删掉文件从新经过命令配置。
本文参考: 廖雪峰的官方网站
如需转载请注明出处:http://www.cnblogs.com/zhuchenglin/p/8820186.html