2016年5月28日
摘要: 在Git中打标签非常简单,首先,切换到需要打标签的分支上: 然后,敲命令git tag <name>就可以打一个新标签: 可以用命令git tag查看所有标签: 默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办? 方法是找到 阅读全文
posted @ 2016-05-28 18:40 JeremyLee87 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。 Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动 阅读全文
posted @ 2016-05-28 18:25 JeremyLee87 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。 要查看远程库的信息,用git remote: 或者,用git remote -v显示更详细的信息: 上面显示了可以抓取和推送的origin的地址。如果没有推送权 阅读全文
posted @ 2016-05-28 18:17 JeremyLee87 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 软件开发中,总有无穷无尽的新的功能要不断添加进来。 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。 现在,你终于接到了一个新任务:开发代号为Vulcan的新功能, 阅读全文
posted @ 2016-05-28 16:54 JeremyLee87 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。 当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前 阅读全文
posted @ 2016-05-28 16:37 JeremyLee87 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 下面我们实战一下--no-ff方式的git merge 阅读全文
posted @ 2016-05-28 16:19 JeremyLee87 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 人生不如意之事十之八九,合并分支往往也不是一帆风顺的。 准备新的feature1分支,继续我们的新分支开发: 修改readme.txt最后一行,改为: 在feature1分支上提交: 切换到master分支: Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。 在ma 阅读全文
posted @ 2016-05-28 14:52 JeremyLee87 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。 一开始的时候,m 阅读全文
posted @ 2016-05-28 14:40 JeremyLee87 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。 如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需 阅读全文
posted @ 2016-05-28 11:41 JeremyLee87 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。 首先,登陆GitHub,创建一个新的仓库,名字叫gitskills: 我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建 阅读全文
posted @ 2016-05-28 11:37 JeremyLee87 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。 首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一 阅读全文
posted @ 2016-05-28 11:10 JeremyLee87 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git有什么特别的地方。 没错,如果只是在一个仓库里管理文件历史,Git和SVN真没啥区别。为了保证你现 阅读全文
posted @ 2016-05-28 10:47 JeremyLee87 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: 这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了: 现 阅读全文
posted @ 2016-05-28 10:24 JeremyLee87 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 自然,你是不会犯错的。不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行: 在你准备提交前,一杯咖啡起了作用,你猛然发现了“stupid boss”可能会让你丢掉这个月的奖金! 既然错误发现得很及时,就可以很容易地纠正它。你可以删掉最后一行,手动把文件恢复到上一个版本的状 阅读全文
posted @ 2016-05-28 10:18 JeremyLee87 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 为什么说Git管理的是修改,而不是文件呢?我们还是做实验。第一步,对readme.txt做一个修改,比如加一行内容: 然后,添加: 然后,再修改readme.txt: 提交: 提交后,再看看状态: 咦,怎么第二次的修改没有被提交? 别激动,我们回顾一下操作过程: 第一次修改 -> git add - 阅读全文
posted @ 2016-05-28 09:59 JeremyLee87 阅读(134) 评论(0) 推荐(0) 编辑
摘要: Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。 先来看名词解释。 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版 阅读全文
posted @ 2016-05-28 09:44 JeremyLee87 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看: git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。 如果嫌输出信 阅读全文
posted @ 2016-05-28 09:30 JeremyLee87 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: 初始化一个Git仓库,使用git init命令。 通过git init命令把这个目录变成Git可以管理的仓库. 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。 多次添加文件: 小结: 初始化 阅读全文
posted @ 2016-05-28 08:55 JeremyLee87 阅读(227) 评论(0) 推荐(0) 编辑