Git是一个开源的分布式版本控制系统,用于敏捷高效地管理项目。相较svn,git最大的特点就是分布式,每个人都拥有一个克隆的版本库,所以提交代码、查看日志、创建分支、合并分支、回退等等操作都直接在本地完成而不需要网络。当然,本地版本库需要和远程共享版本库同步,这就需要网络了。
github,作为一家git服务提供商,可以托管你的git版本库,而且对于开源项目是可以免费托管,这对于开源项目是一大利好。

github使用

注册github账号

首先你要有一个github账号,注册地址 https://github.com/join,记住你的用户名和邮箱,这里例如mycwq和 mycwq@example.com (邮箱必须是有效的,需要验证)

创建git版本库

登录github账号,点击右上角的+号创建版本库(Create a new repository)。版本库也叫数据仓库
可以保持以上选项不修改,点绿色按钮完成创建。成功后取到git库地址 https://github.com/mycwq/test.git

克隆版本库到本地

就是获取git共享库的所有内容,要确保系统安装了git命令工具,没有的话参考这篇文章。
$ git clone https://github.com/mycwq/test.git
提交到共享版本库
git下这个操作有2个步骤,第一步提交代码到本地版本库,第二步是同步本地版本库到远程的共享版本库
如果是第一次使用,需要设置账号和邮箱
$ git config --global user.name "mycwq"
$ git config --global user.email "mycwq@example.com"
下面以例子说明如何提交内容到版本库:
$ echo "# test" > README.md
$ git add README.md
$ git commit -m "first commit"
$ git push origin master
然后,按提示输入账号和密码。成功后,可以在github看到刚刚提交的内容。

git版本库与命令关系图

在阮一峰博客上找到这个图片,很有参考价值。文章在这里,不妨去看看吧
以上,fetch、clone、push、pull都是远程操作,其他都是本地完成的。

git常用命令

命令
说明
git diff
显示版本库所有文件的改动内容,但不包括版本外的文件
git status
树状显示版本库的大体情况,如哪些文件有改动,哪些还没加到版本库
git log
查看提交日志
git clone <库地址>
克隆远程版本库到本地
git fetch 同步共享版本库的更新内容到本地版本库
git add 索引记录要提交的文件,在git commit时提交
git commit 提交改动到本地版本库
git push
同步本地版本库到共享版本库
git remote
列出所有远程主机
git branch <分支名>
新建分支
git checkout <分支名>
切换到分支(设置某个分支为工作目录)
git checkout -b <分支名>
检出分支,等效于 git branch <分支名> && git checkout <分支名>
git merge <分支名>
合并某个分支到工作目录
git pull
同步共享版本库到本地版本库,并且合并到当前工作目录。等同于 git fetch 加上 git merge <分支名> 
git blame <filename>
获取文件每一行的详细修改信息,包括作者、日期和日志编号

git分支管理

分支的常用命令

建立分支
$ git branch branch1
列出所有分支
$ git branch
  branch1
* master
以上,*表示当前在使用的分支,即工作目录所在的分支。
如果是远程仓库github的分支情况:
$ git branch -r
  origin/branch1
  origin/master
切换分支
$ git checkout branch1
Switched to branch 'branch1'
相当于把branch1作为当前分支,可以 git branch 看下变化
删除分支
$ git branch -d branch1
以上命令,git会检查该分支是否已合并到上游分支,如果没有,则不能删除分支。
但如果真的要删除该分支,使用 -D 参数强行删除:
$ git branch -D branch1
如果想删除github上的分支 branch1,
$ git push origin --delete branch1
或者是
$ git push origin :branch1
重命名分支
$ git branch -m branch1 branch2
合并分支
git有三种合并分支方式,straight merge, squashed commits 和 cherry-picking
区别如下:
1、直接合并(straight merge)
   将某分支所有的历史记录全部合并到当前分支,原来分支有多少个commit,当前分支就增加多少条日志
 命令如下:
    $ git merge branch1
2、拼凑合并(squashed commits)
 将某分支上的所有的历史记录合成一条日志提交,这样的话,当前分支无法看到该分支每次的提交记录。
 命令如下:
    $ git merge --squash branch1
    $ git commit -m 'branch1 merge'
3、挑选合并(cherry-picking)
    将分支的某些提交日志合并到当前分支
  命令如下:
     $ git cherry-pick 7654321
   以上,7654321是提交日志的hash值,可以从git log 查到,本来是40位,但git通常需要前面7位就可以识别了。
   如果需要合并多条日志,但不想git每次都立刻合并,可以改下这个命令:
     $ git cherry-pick -n 7654321
提交到远程分支
提交到远程仓库github的分支 branch1,分支不存在会自动创建
$ git push origin branch1
导出分支
类似svn export,例如导出master分支:
$ git archive master -o ../master.zip

分支的使用

这里以最简单实用的主次分支模型,也就是两条分支,一条记master,另一条记develop,项目在develop下开发,再不定期合并到master分支。
首先,我们需要定位好 master 和 develop 的关系:
master :主分支,就是生产环境的版本
develop : 次分支,就是开发环境的版本
git创建时有master分支,我们需要再创建一个分支。使用下面这个命令,从master分支位置创建 develop 分支,并将当前分支切换到 develop 分支
$ git checkout -b develop master
这样,我们可以在 develop 分支下开发了。直到项目需要交付给用户时,再将 develop分支 合到 master分支
$ git checkout master
$ git merge develop
当 develop分支合到 master 分支后,如果要继续开发,再把 develop 分支切换成当前分支
$ git checkout develop
这样,又回到了开发分支,接着发布、开发,发布、开发,如此周而复始。
当然,分支在实际使用中可能不只这么简单,可能还要创建临时的 bugfix 分支,但方法都是差不多的。
1、创建一个bugfix 的临时分支:
$ git checkout -b bugfix-0.1 master
2、修正bug后,再合并到master分支和develop分支
$ git checkout master
 $ git merge --no-ff bugfix-0.1
 $ git checkout develop
 $ git merge --no-ff bugfix-0.1
3、再然后,删掉这个临时分支
$ git branch -d bugfix-0.1
细心的同学会观察到我们这里使用了 --no-ff 参数,这是因为,Git 默认使用快进式合并(fast-farward merge),只是将 master 分支指针指向 bugfix-0.1分支,而 --no-ff 则会创建一条合并日志,保证bugfix-0.1分支删除时不丢失历史日志。

git相关

git config之 push.default

warning: push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple
When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.
Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
大致意思是,Git2.0 将 push.default 的默认值 matching 改成了 simple
matching
如果 git push 没有指定分支,git 会推送所有远程分支对应的本地分支
simple
如果 git push 没有指定分支,git 只推送当前分支
参考资料:
[1] git: fetch and merge, don't pull  Mark
[2] Git分支(Branching)與合併(Merging) suiaing
[3] A successful Git branching model  Vincent Driessen
[4] Git分支管理策略 阮一峰
参考:http://blog.csdn.net/mycwq/article/details/49443775

Git版本控制与github使用相关推荐

  1. 【Git版本控制管理】Gitee(码云)和GitHub的使用

    远程仓库的使用 文章目录 远程仓库的使用 使用码云(Gitee) 使用GitHub 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读 ...

  2. Git版本控制工具和Github代码托管平台

    一.创建代码仓库 1.配置自己的身份,提交代码时才知道是谁提交的. 设置name git config --global user.name "GHQ" 设置email git c ...

  3. 非程序员如何使用 Git——版本控制你的生活

    在协同工作和版本控制方面,Git 绝对是一个优秀的工具,但其优点并不被大众所熟知.在过去的几年中,由于大众对于文字处理,电子表格(译者注:这里暗指Word和Excel,下同.)以及其他常用的功能的需求 ...

  4. gitee提交代码_git 版本控制,github和gitee

    3.4 git 版本控制 # 查看本地状态git status # 修改README.txt ,添加一行,保存,添加到暂存区git add README.txt # 查看当前仓库某一个文件的版本git ...

  5. git版本控制(精)

    个人常用 git pull git status git add -A . git status git commit -m "sandbox" -a git push git s ...

  6. git修改服务器的命令行,Git版本控制工具安装及命令行操作

    很多小伙伴不知道如何来安装Git版本控制工具,对于命令操作比较陌生.本文做了一个详细的文档,希望对大家有所帮助. 1.git 是什么一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制 ...

  7. Android Studio(13)--- Git之使用GitHub搭建远程仓库

    Git之使用GitHub搭建远程仓库 在上一节中,我们学习了如何使用Git,构建我们的本地仓库,轻松的实现了版本控制以及代码还原,修改日志查看等:读者肯定不满足与本地是吧,假如是多个人一起来开发一个程 ...

  8. Android 应用开发(30)---Git之使用GitHub搭建远程仓库

    Git之使用GitHub搭建远程仓库 本节引言: 在上一节中,我们学习了如何使用Git,构建我们的本地仓库,轻松的实现了版本控制以及代码还原,修改日志查看等:读者肯定不满足与本地是吧,假如是多个人一起 ...

  9. 在Android Studio 上为项目添加Git版本控制

    准备:Android Studio 需要配置GitHub ,配置方法在上一篇文章:https://blog.csdn.net/z1web/article/details/84106234 然后打开你想 ...

最新文章

  1. npoi导出execl源码,vs2008实现,包括using库
  2. uniapp添加顶部导航栏并且更换图标
  3. 《Python核心编程》第二版第36页第二章练习 续一 -Python核心编程答案-自己做的-...
  4. jquery : 动态构建表单自动提交请求
  5. SAP中国,在中国,为中国,一些包含了SAP logo的NBA运动套装
  6. java Object类是可以接收集合类型的
  7. js 定时网页点击_反爬 JS 逆向,扣代码解密分析
  8. 解决sqlalchemy连接mysql报错ModuleNotFoundError: No module named ‘pymysql‘
  9. Java中的基本类型和引用类型(未完)
  10. cmk聪明客机器人餐厅_晒晒我家85平新房,餐厅装修的太漂亮了,儿童房飘窗更实用!...
  11. iPhone 6 Plus实际分辨率为2208x1242的问题
  12. dynamips之入门篇(dynamipsGUI小凡模拟器)
  13. 小游戏开发引擎CocosCreator
  14. 计算空间中点到直线的距离
  15. 山东教师教育网-404、登录、密码找回、常见问题、绑定已有账户
  16. 关于推荐算法未来的思考:推荐诗与远方
  17. Only fullscreen activities can request orientation终极解决方法
  18. CSS图片链接、映射
  19. SpringBoot调用SAP接口(搭建部署)
  20. SEO原创文章的重要性

热门文章

  1. 《帝友货代系统》项目研发总结
  2. 大众点评分布式系统监控开源框架cat源码阅读(个人笔记)
  3. sa结构组网方式_关于 SA/NSA 两种组网模式,你了解多少?-通信/网络-与非网
  4. matlab 调整矩阵形状,在MATLAB中调整3D矩阵(图像)的大小
  5. 520送对象什么礼物最好?精选4款好用的电容笔
  6. 查询自己电脑的IP地址
  7. dedeCMS采集规则各大CMS采集规则通用
  8. (转)高并发高流量网站架构详解
  9. 关于Bonobo Git Server的安装
  10. Java实现QQ登陆界面的搭建