记录我学github的路程(三)
2015-12-22 更新
一、Bug分支
1,假设如下场景,你正在dev分支工作,突然接到一个修复代号为101的bug的任务时,dev的东西还没不能提交,但是bug需要马上修复。
Git提供了一个stash功能,可以把当前工作现场存储起来,等以后恢复现场后继续工作。
2,使用方法:
$ git stash // 类似于保护现场
注:执行上面时可能会出现这个错,no local changes to save,有可能是没有切换到dev分支,或者切换后没有在工作区进行修改,总之,多试试
然后切换回需要的分支进行修复,这里假设是master分支
$ git checkout master
再从master创建临时分支
$ git checkout -b issue-101
这里进行修改,并提交
$ git add readme.txt
$ git commit -m "fix bug 101"
这里就算是修复完成了,然后切换回master分支,完成合并,最后删除 issue-101 分支

$ git checkout master
$ git merge --no-ff -m "merged bug fix 101" issue-101 // 合并
$ git branch -d issue-101
到这里就修复完成了,切换回dev分支

$ git checkout dev
$ git status // 可以查看一下工作区是干净的
查看刚才的工作现场
$ git stash list // 可以看到工作现场还在,git把stash内容存在某个地方了,但是需要恢复,有两个方法
(1) $ git stash pop // 恢复的同时把stash内容也删了
(2) $ git stash apply // 恢复后,stash内容并不是删除,需要 $ git stash drop 来删除
删除后可以再次查看一下
$ git stash list
2,可以多次stash,恢复的时候先用$ git stash list 查看,然后恢复到指定的stash,如下:
$ git stash apply stash@{0}

4,小结:修复bug时,通过创建新的bug分支进行修复,然后合并,最后删除
手里有工作没有完成时,先把工作县城 git stash一下,然后去修复bug,修复完了再 git stash pop,回到工作现场。
2015-12-28 更新
Feature分支
1,添加新功能时,肯定不希望因为一些实验性质的代码把主分支搞乱了,所以,添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后删除该分支。
2,实例:假设你接到一个新任务,代号为vulcan
(1)准备开发: $ git checkout -b feature-vulcan
(2)5分钟后,开发完毕,查看一下 $ git status
(3)切回dev目录,$ git checkout dev 若一切顺利,feature分支和bug分支是蕾丝的,合并然后删除
(4)此时,新功能要取消,就要删除这个分支 $ git branch -d feature-vulcan
这时候Git会提醒你,feature-vulcan还没有合并,若删除则会丢失修改。需要强行删除
$ git branch -D feature-vulcan // 强行删除

多人协作
从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
1,查看远程库的信息 $ git remote
$ git remote -v // 查看更详细的信息

上面显示了可以抓取和推送的origin的地址,若没有推送权限,就看不到push的地址
推送分支
1,推送分支:就是把该分支上的本地提交推送到远程库。推送时,要制定本地分支,这样Git就会把该本地分支推送到远程库对应的远程分支上
$ git push origin master // 要推送dev分支,就把master换成dev
2,哪些分支需要推送,哪些不要呢,这里有几个原则:
(1)master分支是主分支,因此要时刻与远程同步
(2)dev分支是开发分支,团队成员都需要在上面工作,所以也要与远程同步
(3)bug分支只用于在本地修复bug,可以用不要推送到远程,除非老板要看看你到底修复了几个bug
(4)feature分支是否推送到远程,取决于你是否和你的小伙伴合作在上面开发
抓取分支
1,多人协作时,大家都会往master和dev分支上推送各自的修改
2,模拟一个小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆。
实例:
先切换到另外一个目录:

这里开始克隆

再次提醒一下:要将SSH Key添加到GitHub,相当于告诉你的GitHub账户信任这台电脑,不知道准不准确,这里希望大神解答。
友情提示:有时候 会出现这个错误
fatal: Not a git repository (or any of the parent directories): .git
提示说没有.git这样一个目录,解决办法如下:
$ git init 就可以了
2016-01-03 更新 新的一年希望自己能变得更好
1,运行$ git clone 可能会出错:warning: You appear to have cloned an empty repository // 克隆一个空目录
或者 fatal: destination path '.' already exists and is not an empty directory // 目标路径已存在,且不为空
解决方法 : 参考自: http://blog.csdn.net/lein_wang/article/details/8182790
$ ls -a
$ rm .git/ -rf
不过我这样试了还是没用,只好把目录删除的东西全删了, 我是这样做的
$ rm * -rf // 这样后面再重新 git clone 一下就好了
// git branch的一些用法,可以参考这个博客 http://blog.csdn.net/xiruanliuwei/article/details/6919319
2,有的运行 Git clone之后,查看分支发现是空的,这时候要注意要切换进你clone过来的那个目录才可以看见分支,不要跟我一样傻逼似,哎

接上面的抓取分支
(1)当你克隆之后,默认只能看到本地的master分支,就像上面那个图一样
(2)现在,你的小伙伴要在dev分支下开发,就必须创建远程origin的dev分支到本地:
$ git checkout -b dev origin/dev
(3)这样,小伙伴就可以在dev上继续修改,然后时不时的把dev分支push到远程
$ git commit -m "add dev 20160103"
$ git push origin dev
(4)你的小伙伴已经向origin/dev分支推送了他的分支,而碰巧你也对同样的文件进行了修改并且推送:
$ git push origin dev // 可能会出错,因为你的小伙伴的最新提交和你试图推送的提交有冲突,Git会提示我们解决的方法,先用git pull把最新的提交从origin/dev中拿下来,然后在本地合并,解决冲突,最后推送:
$ git pull // 也可能会失败,因为没有指定本地dev分支与远程origin/dev分支的链接,根据提示设置dev分支与远程origin/dev分支的链接
$ git branch --set-upstream dev origin/dev
再pull。
若pull成功后有冲突,需要手动解决,解决的方法和分支管理中的解决冲突一样,解决后再push
3,多人协作的模式通常是这样:
(1)首先,可以试图用git push origin branch-name退送自己的修改
(2)若退送失败,则因为远程分支比你的本地更新,需要先用git pull 合并
(3)若合并有冲突,则解决本地冲突,并在本地提交
(2)没有冲突或解决了冲突,再用git push origin branch-name推送就可以了
4,小结:
(1)查看远程库信息,使用git remote -v
(2)本地新建的分支若不推送到远程,别人是看不见的
(3)在本地创建和远程分支对应的分支,用$ git checkout -b dev origin/dev 颜色部分表示分支名字,最好一致
(4)git pull提示 "no tracking information",则说明本地分支没有与远程分支建立链接关系,用命令
$ git branch --set-upstream dev origin/dev 建立本地分支与远程分支的关联
2016-01-04 更新
标签管理:发布一个版本时,通常会在版本库中打上一个标签,这样就唯一确定了打标签时刻的版本,将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来
Git的标签虽然是版本库的快照,但其实就是只想某个comit的指针(跟分支很像,但是分支可以移动,而标签不能移动)
创建标签
1,首先切换到需要打标签的分支上,
$ git branch
$ git checkout master
2,然后敲击 git tag name 就可以打一个标签
$ git tag v1.0
3,查看所有标签
$ git tag
4,默认标签是打在最新提交的commit上的。有时候忘记打了,比如今天周五了,周一的标签还没有打,怎么办
方法是找到历史提交的commit,然后打上就可以了
$ git log --pretty=oneline --abbrev-commit
然后找到对应的分支,打上就可以,比如这里对 "1127 change",打标签,就这样做
$ git tag v0.01 2c8de67

5,注意标签不是按时间排序的,而是按字母,可以用git show tagname 查看标签信息
6,还可以创建带有说明的标签, -a指定标签名, -m说明文字
$ git tag -a v0.1 -m "version 0.1 release" 98e56b0
$ git show v0.1 // 再查看一下

7,还可以通过-s用私钥签名一个标签
$ git tag -s v0.2 -m "signed version 0.2 release" 7478f13
签名采用PGP签名,因此,必须先安装gpg,否则就会报错,

若报错,请参考GnuPG帮助文档配置key
// 关于这个可以查看这个http://wenku.baidu.com/link?url=zGiQnJuni2FQFfmeRuXa_novFIQrElE8esw7bB-P5t7jJNFw_2_3vhfBIIrmmJIUWbW5H1CYfh14PdhkNkH2Xx2MbWGvaqN9Yofh28n0vtG###
// windows下好像叫这个 Gpg4win ,
8,小结:
(1)$ git tag tagname 用于创建一个标签,默认为HEAD,也可以指定一个commit ID
(2)-a tagname -m "balabala..." 可以指定标签信息
(3)-s tagname -m "balabala..." 可以用PGP签名标签
(4)$ git tag 可以查看所有标签
2016-01-05 更新
操作标签
1,标签打错了,也可以删除。创建的标签都只存储在本地,不会自动推送到远程,所以,打错的标签可以在本地安全的删除
$ git tag -d v0.1
2,要推送某个标签到远程,
$ git push origin v1.0
3,一次性推送全部尚未推送到远程的本地标签
$ git push origin --tags
4,推送到远程后的标签删除起来比较麻烦,先从本地删除
$ git tag -d v0.9
然后从远程删除
$ git push origin :refs/tags/v0.9
可以登录GitHub查看有没有删除标签

20160106
第一篇就说明了是参看廖雪峰老师的东西做的笔记,突然间好多人看了,好激动。还是把廖雪峰老师的主页放上来,http://www.liaoxuefeng.com/
廖老师的东西比较权威靠谱一点
记录我学github的路程(三)的更多相关文章
- 记录我学github的路程(二)
2015-12-09 更新 1,现在,本地有了一个库,你可能会想到GitHub创建一个库,并且关联起来.这样,远程的库既可以当作备份,又可以让其他人通过该仓库来协作. 2,步骤: (1)登录GitHu ...
- 记录自己使用GitHub的点点滴滴
前言 现在大多数开发者都有自己的GitHub账号,很多公司也会以是否有GitHub作为一项筛选简历以及人才的选项了,可见拥有一个GitHub账号的重要性,本文就从最基本的GitHub账号的注册到基本的 ...
- 文科妹学 GitHub 简易教程(转)
文科妹学 GitHub 简易教程 #什么是 Github ?必须要放这张图了!!! Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版 ...
- .net基础学java系列(三)徘徊反思
.net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课
centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更 ...
- 从零开始学ios开发(三):第一个有交互的app
感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12 ...
- vue 项目记录.路飞学城(一)
前情提要: 通过vue 搭建路飞学城记录 一:项目分析 二:项目搭建 1:创建项目 vue init webpack luffy 2:初始化项目 清除默认的HelloWorld.vue组件和APP. ...
- 文科妹学 GitHub 简易教程
#什么是 Github ?必须要放这张图了!!!<img src="https://pic4.zhimg.com/7c9d3403bf922b1663f56975869c829b_ ...
- 每天学点SpringCloud(三):自定义Eureka集群负载均衡策略
相信看了 每天学点SpringCloud(一):简单服务提供者消费者调用,每天学点SpringCloud(二):服务注册与发现Eureka这两篇的同学都了解到了我的套路,没错,本篇博客同样是为了解决上 ...
随机推荐
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
- ajax请求成功后打开新开窗口(window.open())被拦截的解决方法
问题:今天在做项目时需要在ajax请求成功后打开一个新的窗口,此时遇到浏览拦截了新窗口的问题,尝试在ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('clic ...
- POJ2104 K-th Number [分块做法]
传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求 ...
- AC日记——砍树 codevs 1388
1388 砍树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 伐木工人米尔科需要砍倒M米长的木 ...
- xcode8权限以及相关设置
我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃. 具体如下图: QQ20160914-0.png 注意,添加的时候,末尾不要有空格麦克风权限:Privacy ...
- [bzoj1007][HNOI2008][水平可见直线] (斜率不等式)
Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y ...
- python的函数
函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如pri ...
- 21-Python-Django进阶补充篇
1. 路由部分补充 1.1 默认值 url: url(r'^index/', views.index, {'name': 'root'}), views: def index(request,name ...
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- Beta版本冲刺计划及安排
经过紧张的Alpha阶段,很多组已经从完全不熟悉语言和环境,到现在能够实现初步的功能.下一阶段即将加快编码进度,完成系统功能.强化软件工程的体会.Beta阶段的冲刺时间为期七天,安排在2016.12. ...