记录我学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 [email protected]{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查看有没有删除标签

时间: 2024-09-30 07:10:24

记录我学github的路程(三)的相关文章

记录我学github的路程(二)

2015-12-09 更新 1,现在,本地有了一个库,你可能会想到GitHub创建一个库,并且关联起来.这样,远程的库既可以当作备份,又可以让其他人通过该仓库来协作. 2,步骤: (1)登录GitHub,应该会有提示,(我还没创建过远程库,很容易看到这个界面) (2)点击那个 Create a respository: (3)这就创建好了一个库,这时候库还是空的,GitHub告诉我们可以从这个仓库克隆出新的仓库.也可以把一个已有的本地仓库与之关联. (4)本地仓库与之关联: 打开Git Bash

从零开始学ios开发(三):第一个有交互的app

感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12点了,就要去睡了,现在身体汤不牢啊,如果不早点睡,第二天上班肯定没精神,要靠红牛了,呵呵,在这样的情况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题. 这几天看来书的第三章,主要讲了如何添加按钮,然后为按钮添加响应事件,当点击按钮后,触

【转载】8天学通MongoDB——第三天 细说高级操作

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点

文科妹学 GitHub 简易教程

#什么是 Github ?必须要放这张图了!!!<img src="https://pic4.zhimg.com/7c9d3403bf922b1663f56975869c829b_b.png" data-rawwidth="600" data-rawheight="412" class="origin_image zh-lightbox-thumb" width="600" data-original

成长记录 | 所学,所思,所行

不要让孩子输在起跑线上,如何做能让孩子赢在起跑线上.相信每位家长都希望孩子在人生的马拉松超跑中取得胜利,而不是短跑或中长跑取得阶段胜利 李笑来年谱 1972年,出生. 1973年,1岁. 1974年,2岁. 1975年,3岁. 1976年,4岁. 1977年,5岁. 1978年,6岁. 1979年,7岁. 1980年,8岁. 1981年,9岁.小学三年级时候,父亲让他手抄<新华字典> ? 1982年,10岁. 1983年,11岁. 1984年,12岁.去延边青少年宫参加计算机培训班.学了BAS

文科妹学 GitHub 简易教程(转)

#什么是 Github ?必须要放这张图了!!! Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件. 好吧,我相信看到这里你已经晕了,这也是我一开始看那些所谓经典教程的感受.写这些教程的人都是几年以上的程序员呀,他们往往直接就告诉你所有命令的含义或者整个体系. 专家盲点(expert blind spot)就是对一个事物知道的越多,就越发不记得"不知道这个事"的情形. 简单来说,Git 是一个管理你的「

一个新手的Python自学之旅 #MacBook #《“笨办法”学Python》#第三章:言归正传讲Python:Mac系统的终端Terminal命令行快速入门

第三章:言归正传讲Python:Mac系统的终端Terminal命令行快速入门 以后我都会将<“笨办法”学Python>简称为“这本书” 本人用了近5年的MacBook,但在此之前,从未使用过电脑自带的“终端Terminal”(图标:).在非程序员的世界里,建立和删除文件夹或文件,都是:鼠标右键点新建/删除,这是UI带来的便利.但是,却不知道如何利用命令行实现这些操作. 首先,要掌握几个我们平时常用,但在代码界有另外名称的名词:目录.路径.打印. --目录:我们认为它是这样的:标题:第一章:第

学会Git玩转Github笔记(三)—— Github Pages 搭建个人网站

https://help.github.com/categories/github-pages-basics/ 一.个人站点 访问 https://用户名.github.io 搭建步骤 1) 创建个人站点   ->  新建仓库(注:仓库名必须是[用户名.github.io]) 2) 在仓库下新建index.html的文件即可 注意: 1.github pages 仅支持静态网页 2.仓库里面是.html文件 3.个人主页也可以设置主题 二.Project Pages 项目站点 访问 https:

《OD学hadoop》第三周0709

一.MapReduce编程模型1. 中心思想: 分而治之2. map(映射)3. 分布式计算模型,处理海量数据4. 一个简单的MR程序需要制定map().reduce().input.output5. 处理的数据放在input中.处理的结果放在output中6. MR程序>八股文7. MR在处理数据的时候,是由一个流向,数据在处理过程中的流向格式:以<key,value>进行流向8. input -> map() -> reduce() -> output<key