Git使用重新学习(分支rebase)
作者:dawncold 发布时间:January 26, 2012 分类:技术
rebase被人翻译成衍合,是和merge功能差不多的一种操作,但提醒一点,进行rebase的内容一定不可以是提交到公共服务器上的内容,简单讲就是rebase操作你在本地自己玩就好了。
详细点的说明去这里看吧:http://progit.org/book/zh/ch3-6.html
这里书写的是一个90后的真实青春(其实里面还有很多他的胡思乱想)
作者:dawncold 发布时间:January 26, 2012 分类:技术
rebase被人翻译成衍合,是和merge功能差不多的一种操作,但提醒一点,进行rebase的内容一定不可以是提交到公共服务器上的内容,简单讲就是rebase操作你在本地自己玩就好了。
详细点的说明去这里看吧:http://progit.org/book/zh/ch3-6.html
作者:dawncold 发布时间:January 26, 2012 分类:技术
分支的使用比较繁杂,前面光说了一些皮毛,现在记录一下分支的管理部分。
查看分支的详细信息:git branch -v,列出分支最后提交的内容,带星号表示当前分支。
查看哪些分支已经被并入当前分支:git branch --merged,也就是说除了那个带星号的分支都是可以删除(-d)的,因为都合并进来了嘛!查看没合并进来的就是--no-merged开关。删除那些没有合并进来的分支会提示错误,但强制删除就可以了,强制删除用-D开关。
不得不说的远程分支
在github创建了一个项目,在项目管理中开启了github Pages服务,这是个给项目做介绍页面的服务,开启后出现了一个远程分支gh-pages,但本地根本访问不到。首先我们应该明确,这个分支暂时不在我们本地,除非你是在这个服务开启后clone了项目,这样肯定有,否则和我一样的话(从本地push过去的),需要先fetch过来这些远程分支:git fetch origin gh-pages:gh-pages。后面两个由冒号分隔的意思是获取origin中的gh-pages分支,放到本地,在本地也叫gh-pages(冒号右侧),当然你可以根据需要更改冒号右侧的本地分支名字。现在查看一下本地分支就能发现出现两个分支了,切换过去后就能看到github给我们生成的index.html文件,你可以编辑了:)
推送本地分支到远程分支的时候可以像上面这样写:git push origin xxx1:xxx2,意思就是推送本地叫xxx1的分支到origin中,推过去叫xxx2,但此处一般简写,光写本地分支名,这样远程分支中的名字也是和本地一样的。
删除远程分支的命令挺好玩的:git push origin :xxx,在xxx左边冒号左侧有一个空格,意思是把本地的空分支推到远程的xxx分支上,就是删除xxx分支的意思。
作者:dawncold 发布时间:January 26, 2012 分类:技术
在git中分支是一个变态技能!
创建分支:git branch [branch-name]即可。
git中有个叫master的分支,这是默认的,刚刚创建了一个testing分支,所以这两个指向是一样的,因为刚刚就在master分支下。但是git为何知道我在master呢?因为还有个叫HEAD的默认指针指向了当前正在使用的分支,所以当你切换分支的时候HEAD就会指向新的地方。
切换分支:git checkout [branch-name](git checkout -b [branch-name]可以实现新建并切换到此分支)切换分支时最好保持暂存区清洁,否则有可能产生冲突阻止你切换。
当我们切换到了testing分支后,再做一些提交,我们的testing分支会继续往下走,但master分支还停留在刚才离开的地方,如果我们需要回去,只需要再切换回master分支即可屏蔽刚才所作的提交,保持文件的原始性。
合并分支:git merge [branch-name],把分支合并到你现在所在的那个分支中,可别合并反喽,当然我感觉反了也没关系,就是个名字的问题吧?
分支删除用-d开关,git branch -d [branch-name]即可。
合并分支的时候遇到冲突是不可避免的,有些冲突能够自动解决,但还有不少是需要我们手动解决的,此时git会在status中告诉我们,我们打开后就能看到由“=====”分割开的两部分,就是让我们选择,等手动修改好后需要再add进暂存区,此时就能提交了。
作者:dawncold 发布时间:January 26, 2012 分类:技术
打标签,挺有用的一个功能,一般是加版本号吧。v1.0,v2.0,vN.0
git tag是看标签
git tag -a 是加带附注的标签,(还有轻量级标签不用加-a,直接给出标签名字完事),接下来一个参数是标签名字,再者需要-m引出附注内容,完整就像这样:git tag -a v1.0 -m 'first version'
加完后可以show一下:git show v1.0,所谓附注就是包含了很多提交者的信息,以后可以慢慢查证使用。
如果你有GPG的话还可以签署标签,把前面的-a改成-s即可,-s是signed的意思,-a是annotated的意思。(刚刚尝试了一下-s,可惜Mac系统上没装gpg软件,签署失败,但大多linux系统都会有的吧,Mac系统的用户请从这里下载GPGTools)
刚才用GPG签名了,现在验证一下:git tag -v xxx,-v就是verify的意思,比如我得到了如下的提示信息:
object a20e6b9c2433e88a9da63abd8d74ddede9bccde6
type commit
tag v_2012-01-26-s
tagger dawncold <loooseleaves@gmail.com> 1327569076 +0800
signed this tag
gpg: 于 四 1/26 17:11:24 2012 CST 创建的签名,使用 RSA,钥匙号 1B1ECF39
gpg: 完好的签名,来自于“dawncold <loooseleaves@gmail.com>”
很可惜,默认tag是不被push到远程仓库中的,如果要分享你的tags,在push的时候要显示地写明:git push origin [tag-name],推送所有tags可以直接用--tags来代替tag-name参数
删除tag需要用-d完成:git tag -d [tag-name]
作者:dawncold 发布时间:January 26, 2012 分类:技术
查看当前远程仓库:git remote -v,加上-v属性能看得内容详细一些。
添加远程仓库:git remote add [shortname] [url]
有了shortname,就相对于给仓库了一个别名,以后可以用别名操作,git fetch xx即可
get fetch xx是获取远程仓库中有而本地没有的数据
提送数据到远程仓库用:git push remote-name branch-name,推送的时候要注意必须没有他人在推送,且没有其他更新才行,如果他人推送了不少更新,你需要先得到更新,合并后再推送。(这里并不是说和svn一样了,只是你可以自己先在本地提交,但推送到远程服务器上时,需要按照先来后到的原则,保证每个人的提交是不冲突的,是最新的。这是我个人的理解)
远程仓库重命名、删除:git remote rename short-name new-name,git remote rm xx
另外git remote show repo-name能够得到不少信息,有哪些要合并啦,哪些已经删除啦,哪些新仓库出现啦等等,这个是需要连接服务器获取的。