简介

Git是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为业界做项目版本管理时的首选。

Tips:非开发人员也可以用Git来做自己的文档版本管理

2013年,淘宝前端团队开始全面采用Git来做项目管理,我也是那个时候开始接触和使用Git,到目前刚好3年时间。Git的api很多,但其实平时项目中90%的需求都只需要用到几个基本的功能即可,所以本文将从 实用主义深入探索 2个方面去谈谈如何在项目中使用Git,一般来说,看完 实用主义 这一节就可以开始在项目中动手用了,我以多年的使用经验保证你放心使用。

鉴于我对mac的厚爱,所以本文只以mac来讲述,windows用户可自行脑补画面(或者让老板给你买个mac吧^_^)。

准备阶段

进入 Git官网 下载合适你的安装包,当前我下载到的版本是2.10.1,本文也将在这个版本上演示效果。

安装好Git后,打开命令行工具(这里我用的是mac自带的 terminal),进入工作文件夹(为了便于理解我们在系统桌面上演示),创建一个新的demo文件夹。

进入 Github网站 注册一个账号并登录,进入本文示例项目首页 [](https://github.com/gafish/reading-list),点击 Clone or download ,再点击 Use HTTPS ,复制项目地址 https://github.com/gafish/reading-list.git ,再回到命令行工具。

一切就绪,接下来进入本文的重点。

实用主义

所谓实用主义,就是掌握了以下知识就可以玩转Git,轻松应对90%以上的需求。

以下是实用主义型的Git命令列表,先大致看一下

git clone
git config
git branch
git checkout
git status
git add
git commit
git push
git pull
git log
git tag
.gitignore

接下来,将通过对我在Github上的阅读列表项目进行实例操作,讲解如何使用Git拉取代码到提交代码的整个流程。


git clone

从git服务器拉取代码
git clone https://github.com/gafish/reading-list.git

代码下载完成后在当前文件夹中会有一个 reading-list 的目录,通过 "cd reading-list/" 命令进入目录。


git config

配置开发者用户名和邮箱
git config user.name gafish
git config user.email 49321443@qq.com

每次代码提交的时候都会生成一条提交记录,其中会包含当前配置的用户名和邮箱。


git branch

创建、重命名、查看、删除项目分支,通过git做项目开发时,一般都是在开发分支中进行,开发完成后合并分支到主干。
git branch daily/0.0.0

创建一个名为 daily/0.0.0 的日常开发分支,分支名只要不包括特殊字符即可。

git branch -m daily/0.0.0 daily/0.0.1

如果觉得之前的分支名不合适,可以为新建的分支重命名,重命名分支名为 daily/0.0.1

git branch

通过不带参数的branch命令可以查看当前项目分支列表

git branch -d daily/0.0.1

如果分支已经完成使命则可以通过 -d 参数将分支删除,这里为了继续下一步操作,暂不执行删除操作


git checkout

切换分支
git checkout daily/0.0.1

切换到daily/0.0.1分支,后续的操作将在这个分支上进行


git status

查看文件变动状态

通过任何你喜欢的编辑器对项目中的 README.md 文件做一些改动,比如我增加一行文字“1. :book: Javascript 框架设计”,保存

git status

通过 git status 命令可以看到文件当前状态 Changes not staged for commit: (改动文件未提交到暂存区)

On branch daily/0.0.1
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   README.mdno changes added to commit (use "git add" and/or "git commit -a")

git add

添加文件变动到暂存区
git add README.md

通过指定文件名 README.md 可以将该文件添加到暂存区,如果想添加所有文件可用 git add . 命令,这时候可通过 git status 看到文件当前状态 Changes to be committed: (文件已提交到暂存区)

On branch daily/0.0.1
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified:   README.md

git commit

提交文件变动到版本库
git commit -m '这里写提交原因'

通过 -m 参数可直接在命令行里输入提交描述文本


git push

将本地的代码改动推送到服务器
git push origin daily/0.0.1

origin 指代的是当前的git服务器地址,这行命令的意思是把 daily/0.0.1 分支推送到服务器,当看到命令行返回如下字符表示推送成功了。

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
To https://github.com/gafish/reading-list.git* [new branch]      daily/0.0.1 -> daily/0.0.1

现在我们回到Github网站的项目首页,点击 Branch:master 下拉按钮,就会看到刚才推送的 daily/00.1 分支了


git pull

将服务器上的最新代码拉取到本地
git pull origin daily/0.0.1

如果其它项目成员对项目做了改动并推送到服务器,我们需要将最新的改动更新到本地,这里我们来模拟一下这种情况。

进入Github网站的项目首页,再进入 daily/00.1 分支,在线对 README.md 文件做一些修改并保存,然后在命令中执行以上命令,它将把刚才在线修改的部分拉取到本地,用编辑器打开 README.md ,你会发现文件已经跟线上的内容同步了。

如果线上代码做了变动,而你本地的代码也有变动,拉取的代码就有可能会跟你本地的改动冲突,一般情况下Git会自动处理这种冲突合并,但如果改动的是同一行,那就需要手动来合并代码,编辑文件,保存最新的改动,再通过 git add .git commit-m 'xxx' 来提交合并。


git log

查看版本提交记录
git log

通过以上命令,我们可以查看整个项目的版本提交记录,它里面包含了提交人日期提交原因等信息,得到的结果如下:

commit c334730f8dba5096c54c8ac04fdc2b31ede7107a
Author: gafish <49321443@qq.com>
Date:   Wed Jan 11 09:44:13 2017 +0800Update README.mdcommit ba6e3d21fcb1c87a718d2a73cdd11261eb672b2a
Author: gafish <49321443@qq.com>
Date:   Wed Jan 11 09:31:33 2017 +0800test.....

提交记录可能会非常多,按 J 键往下翻,按 K 键往上翻,按 Q 键退出查看


git tag

为项目标记里程碑
git tag publish/0.0.1
git push origin publish/0.0.1

当我们完成某个功能需求准备发布上线时,应该将此次完整的项目代码做个标记,并将这个标记好的版本发布到线上,这里我们以 publish/0.0.1 为标记名并发布,当看到命令行返回如下内容则表示发布成功了

Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/gafish/reading-list.git* [new tag]         publish/0.0.1 -> publish/0.0.1

.gitignore

设置哪些内容不需要推送到服务器
touch .gitignore

.gitignore不是git命令,而在项目中的一个文件,通过设置 .gitignore 的内容告诉git哪些文件应该被忽略不需要推送到服务器,通过以上命令可以创建一个 .gitignore 文件,并在编辑器中打开文件,每一行代表一个要忽略的文件或目录,如:

demo.html
build/

以上内容的意思是Git将忽略 demo.html文件 和 build/ 目录,这些内容不会被推送到服务器上

小结

通过掌握以上这些基本命令就可以在项目中开始用起来了,如果追求实用,那关于Git的学习就可以到此结束了,偶尔遇到的问题也基本上通过 Google 也能找到答案,如果想深入探索Git的高阶功能,那就敬请期待下一期 深入探索 吧。


欢迎大家关注我的微信公众号,将不定期推送前端开发相关原创文章

Git探秘:实用主义(1/2)相关推荐

  1. git 提交命令_工作总结:Git的学习和使用,最详细的Git教程,从入门到精通

    前言 Git简介 实用主义 深入探索 总结 参考资料 前言 Git 是程序员学习和工作都离不开发工具,今天和大家分享 Git 常用命令总结. Git简介 Git 是一种分布式版本控制系统,它可以不受网 ...

  2. 带你Git从入门到精通

    带你Git从入门到精通 [本文拷贝自码霸霸微信公众号,地址:https://mp.weixin.qq.com/s/0F6bjH1GRHhTnpfJPwLe1g] 目录: 前言 Git简介 实用主义 深 ...

  3. Git 从入门到放不下

    @Git 从入门到放不下TOC Git 从入门到放不下 gafish Java基基 2019-09-22 点击上方"Java基基",选择"设为星标" 做积极的人 ...

  4. 万字详解,Git 入门最佳实践!

    作者 | gafish 链接 | https://github.com/gafish/gafish.github.com 前言 Git简介 实用主义 深入探索 总结 参考资料 前言 Git 是程序员学 ...

  5. Git 入门最佳实践

    Git 入门最佳实践 前言 Git简介 实用主义 深入探索 总结 参考资料 前言 Git 是程序员学习和工作都离不开发工具,今天和大家分享 Git 常用命令总结. Git简介 Git 是一种分布式版本 ...

  6. 保姆级Git入门教程,万字详解

    作者 | gafish 编辑 | 高效程序员 前言 Git简介 实用主义 深入探索 总结 参考资料 前言 大家好,我是 SAM. Git 是程序员学习和工作都离不开发工具,也是非程序员好用的文档版本管 ...

  7. 万字详解Git入门教程!

    作者 | gafish 编辑 | 高效程序员 前言 Git简介 实用主义 深入探索 总结 参考资料 前言 Git 是程序员学习和工作都离不开发工具,也是非程序员好用的文档版本管理工具,今天给大家带来了 ...

  8. 手把手教你入门 Git 教程,图文实例详解

    前言 Git简介 实用主义 深入探索 总结 参考资料 Git简介 Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人 ...

  9. Git 入门教程,10000 字详解

    前言 Git简介 实用主义 深入探索 总结 参考资料 Git简介 Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人 ...

最新文章

  1. IT规划宜分步走 忌盲目好大喜功(载)
  2. Java开发命名规范总结
  3. python适合做后端开发吗-用Python开发app后端有优势吗
  4. PHP对redis操作详解
  5. ubuntu 中vi的使用方法
  6. android 屏幕旋转不重新加载,Android webview旋转屏幕导致页面重新加载问题解决办法...
  7. python枚举是什么意思,什么是枚举python
  8. [转载] 华中科技大学期刊分类办法
  9. Oracle —— 如何执行SQL文件
  10. kafka 的pom文件_基于SparkStreaming+Kafka+HBase实时点击流案例
  11. 4.1 - 《机器学习基石》Home Work 1 Q.15-17
  12. 华为搜索引擎面世,百度搜索有点危险了!
  13. 海湾汉字编码表全部_汉字编码简明对照表
  14. 基于Python的仓库库存管理系统的设计和实现
  15. wps在线预览接口_Office在线预览及PDF在线预览的实现方式大集合
  16. 如何选择剑桥英语KET,PET课程和老师
  17. 【虚幻引擎4(UE4)实用技巧】-关于高亮显示物体轮廓线
  18. 微信好友排行榜 最简教程 二
  19. ChatGPT之父『山姆·奥特曼』总结的10条创业秘决!
  20. 基于云的胜利冲锋队 团队团队展示

热门文章

  1. slf4j导入那个依赖_学习SPRINGBOOT结合日志门面SLF4J和日志实现LOGBACK的混合使用
  2. 怎么用canvas画秒针_用canvas画一个钟表
  3. 一台支持vlan管理的交换机_关于交换机的VLAN技术你了解多少?
  4. JackJson 使用记录
  5. 《深入理解计算机系统》第七章——链接知识点总结
  6. 终止forEach的循环
  7. React 组件绑定点击事件,并且传参完整Demo
  8. 【Android】ViewPager实现无限循环滚动
  9. POJ 1185 炮兵阵地 (状压DP)
  10. SQL Server 2012 OFFSET/FETCH NEXT分页示例