git教程

git教程
laiqun@msn.cn


1. 问题背景?

如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:

图片1

过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。 看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。 多人合作写一篇文档的时候需要把你的改动和她的部分合并,真困难。

2. 解决方案?

解决方法:于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便? 这个软件用起来就应该像这个样子,能记录每次文件的改动:

版本 用户 说明 日期

1 张三 删除了软件服务条款5 7/12 10:38

2 张三 增加了License人数限制 7/12 18:09

3 李四 财务部门调整了合同金额 7/13 9:51

4 张三 延长了免费升级周期 7/14 15:17

这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

3. 经典流程

  1. 创建版本库
  2. 扫描修改
  3. 缓存修改
  4. 提交修改 对应的git-gui讲解:

图片2

图片3

重复2.3.4就会形成一条版本线。单击每个版本节点,可以很容易的知道修改了第几行,添加了哪些文件。

图片4

4. 背后原理

  • 为什么要执行add然后提交?
 图片5

工作区 暂存区 带指针的树形仓库

  • 存储机制为什么Git比其他版本控制系统设计得优秀?因为Git跟踪并管理的是修改,而非文件。

你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。

5. 版本切换

  1. 查看修改 绿色为新加的,红色为旧的 图片6
  1. 版本选择
    • 在想要的版本上,鼠标右击,选中reset,hard reset 既可以在版本库中穿梭 
图片7

图片8

图片9

6. 本地分支管理

图片10

  • 分支管理的意义协同工作
    • checkout 创建和切换分支
    • merge用于合并分支
    • 冲突解决

冲突

7. 远程管理

图片11

  1. 先用git clone来下载远程项目的全部文件

  2. 如果觉得本地文件不是很新,远程项目可能已经更新,使用fetch命令获得更新,然后merge与本地文件混合。

    • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并。
    • pull命令相当于fetch+merge,prune删除远程已经删除的分支。
    • 用push 进行上传
  3. 与远程github项目进行关联

    • git remote add origin git@github.com:username/repo.git
    • 然后可以git push origin master (origin表示远程)

8. 远程多人合作流程

因此,多人协作的工作模式通常是这样: 

1. 首先,可以试图用git push origin branch-name推送自己的修改; 

2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;pull(fetch+merge) 

3. 如果合并有冲突,则解决冲突,并在本地提交; 

4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

5. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch set-upstream branch-name origin/branch-name。 这就是多人协作的工作模式,一旦熟悉了,就非常简单

9. 管理github项目

  1. 生成ssh key
  2. 在自己的git账号上添加ssh key
  3. git clone 把整个项目拷贝下来
  4. git push 上传到远程
 图片12

github上的fork相当于复制仓库

Pull request 将自己改动合并到原始库,做贡献, (需要原始库维护者的同意)

 图片13

图片14

  • 参考网站 https://guides.github.com/activities/hello-world/

10. 总结

  • 操作git-gui来进行回顾!!

    1. 本地管理 创建(init) 检测改动(status) 缓存(add) 提交(commit) 查看改动(diff) 版本切换(reset -hard)
    2. 分支管理 新建 融合(merge)删除 分支切换(checkout)
    3. 远程管理 克隆(clone) fetch(引入) push(推送或上传) pull(fetch+merge) (净化)prune
  • 好处

    1. 不再需要备份多个文件
      • 添加到版本库
    2. 多人合作变的方便,同步
      • 分支管理与合并
    3. 监督每个人的代码提交量 修改量
      • 查看修改功能





posted @ 2016-05-10 16:57  QQLQ  阅读(483)  评论(1编辑  收藏  举报