《GitHub 入门与实践》 笔记

了解GitHub

Git 和 GitHub 的区别

在Git中,开发者将源代码存入名为“Git仓库”的资料库中,并加以使用。而GitHub则是在网络上提供Git仓库的一项服务。这也就是说Github上公开的软件源代码都是有Git进行管理。

社会化编程

SOCIAL CODING.随着GitHub的出现,让所有人都平等的拥有了更改源代码的权利,软件开发者们才真正意义上拥有了源代码.

Git 操作

Git 基本操作

  • git init ——初始化仓库

  • git status ——查看仓库状态

  • git add ——向暂存区添加文件

  • git commit ——保存仓库的历史记录,.可以将当前暂存区中的文件实际保存到仓库的历史记录中.通过这些记录,我们可以在工作树中复原文件

    • -m参数:参数后为提交信息的概述(单行)

    • 如果想要记述得更加详细,不加-m,执行后编辑器会启动,格式如下

        第一行:用一行文字简述提交的更改内容
      第二行:空行
      第三行以后:记述更改的原因和详细内容
  • git log —— 查看提交日志

    • 只显示提交信息的第一行 git log --pretty=short
    • 只显示指定目录/文件的日志 git log README.md
    • 显示文件前后的改动 git log -p README.md
  • git diff —— 查看更改前后的差别

    • 查看工作树和暂存区的差别 git diff
    • 查看工作树和最新提交的差别 git diff HEAD.(不妨养成这样一个好习惯:在执行git commit前,执行git diff HEAD命令,查看本次提交和上次提交的差别,确认后再提交)

其他常用操作

#(项目在github上)直接clone 远程仓库
git clone git@github.com:michaelliao/gitskills.git
#(本地已有项目)上传本地文件到远程仓库
git init
git remote add origin git@xxxx.git
git add .
git commit -m 'something'
git push origin master
git status
#可以丢弃工作区的修改 (commit 之前
git checkout -- file
#把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD file
#从远程仓库更新最新代码
git pull origin master
#清除提交缓存,然后可以重新添加
git rm -r --cached . /或者指定文件

分支操作

#创建新分支,并且切换到新分支
git checkout -b dev
# 查看当前分支
git branch
# 提交到当前分支
git push origin dev
# 合并到主分支,先切换到 主分支,再merge
git checkout master
git merge dev
#合并后,还需要再push一次
git push origin master
#删除分支
git branch -d dev
git push origin :dev

tag 操作

git tag -a v1.0 -m 'some message'
git show v1.0
git push origin v1.0
# 删除 tag
git tag
git tag -d v1.1
git push origin --delete tag v1.1

Git: 分支操作

  • git branch —— 显示分支一览表

  • git checkout -b —— 创建、切换分支

    • 创建分支,并切换到分支,并提交

        $ git checkout -b feature-A
      Switched to a new branch 'feature-A'
      //实际上等同于下面两条命令
      $ git branch feature-A
      $ git checkout feature-A
    • 切回到master, git checkout master

    • 切回到上一个分支,git checkout - , 用"-" 可以代替分支名

  • 特性分支:是集中实现单一特性(主题),初次之外不进行任何作业的分支。

  • 主干分支:可以发布软件的稳定分支。有时可以用标签Tag等创建版本信息,同时管理多个版本的发布。

  • git merge ——合并分支

    • 假设 feature-A 已经开发完,先需要将它合并到master。

        $ git checkout master
      $ git merge --no--ff feature-A
      // 为了在历史记录中明确记录本次分支合并,我们需要创建合并提交。因此需要加上 --no--ff 参数
  • git log --graph —— 以图表的形式查看分支。*该命令可以用图表形式输出提交日志,非常直观

更改提交的操作

  • git reset ——回溯历史版本

    • 要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用到git reset --head 命令。只需要提供hash值,就可以完全恢复至该时间点的状态
    • git log 只能查看当前状态为终点的历史日志。用**git reflog **可以查看当前仓库的操作日志。通过log查找hash值,通过reset --hard 命令恢复到回溯历史前的状态
  • 消除冲突

    • 解决冲突后,执行git add 和git commit命令

        <<<<<<< HEAD
      -feature-A
      =======
      -fix-B
      >>>>>>> fix-B
  • git commit --amend ——修改提交的comment (上一条),执行命令后,会启动编辑器。执行 git log --graph 可以查看是否修改成功。

  • **git rebase -i ** —— 压缩历史日志。

    • git rebase -i HEAD~2 : 可以选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录对象,并在编辑器中打开

        pick 7a33333 Add feature-C
      pick 6f11111 Fix typo #p,pick = use commit
      #r,reword = use commit,but edit the commit message
      #e,edit = use commit,but stop for emending
      #s,squash = use commit, but meld into previous commit
      #f,fixup = like 'squash',but discard this commit`s log message
      #x,exec = run command (the rest of the line) using shell //将6f11111 Fix typo的历史记录,压缩到7a33333的Add feature-C里。将pick删除,改写为fixup
      pick 7a33333 Add feature-C
      fixup 6f11111 Fix typo

远程仓库操作

  • git remote add ——添加远程仓库

      $ git remote add origin git@github.com:github-book/git-tutorial.git
  • git push —— 推送至远程仓库

  • git clone —— 获取远程仓库

    • 执行clone 命令后,默认处于master分支
    • git check -b feature -D origin/feature-D
  • git pull —— 获取最新的远程仓库分支

如果两人同时修改了统一部分源代码,push时就很容易发生冲突。所以多名开发者在同一个分支中进行作业时,为减少冲突情况发生,建议频繁地进行push和pull操作

GITHUB 特殊技巧

搜索文件

在仓库页面按 ‘t’键,然后输入要找的目录或者文件的部分名称,筛选器会在仓库目录和文件中进行筛选,搜索出要找的文件。这种方式比一级级查看目录和文件要快得多。

查看差别

在github上,直接修改URL就可以让用户以多种形式查看差别。

查看分支之间的差异

https://github.com/rails/rails/compare/4-0-stable...5-0-stable

这样就可以查看两个分支之间的差异了。上面的网页可以看到,两个版本之间提交有上万次,Files changed 有3315....

查看与几天前的差别

https://github.com/rails/rails/compare/master@{7.day.ago}...master

这样就可以查看这段期间内的差别。day 还有其他几种形式。

  • day
  • week
  • month
  • year

查看与指定日期之间的差异

https://github.com/rails/rails/compare/master@{2016-09-01}...master

这样便可以查看与指定日期之间的差别。

由于可以从多种角度查看差别,所以github也称得上是一款优秀的源代码查看器。善于利用上述技巧,能节省不少时间。

GMF 语法特殊用法

GMF github-flavored-markdown.MD语法不做过多介绍,只介绍其中一些特性。

语法高亮

def hello_world
puts 'hello world'
end

这样一来,代码就会被添加语法高亮,变得直观易读。

TaskList 语法

//本月计划的任务
- [ ] 完成ES6语法改造
- [ ] 完成非正常单词改造
- [x] 学完GITHUB特殊技巧
  • [ ] 完成ES6语法改造
  • [ ] 完成非正常单词改造
  • [x] 学完GITHUB特殊技巧

这样一来 ,这段文字就会标记成复选列表的样式。这个复选样式可以直接勾选或者取消。不必打开编辑器重新编辑,非常方便

在评论中应用表情

在评论中输入 ":" 便会启动表情自动补全功能。只需要输入几个与表情相关的字母,系统就会为您筛选自动补全的对象。具体表情见:http://www.emoji-cheat-sheet.com

Issue 技巧

在相关Issue中显示提交信息

在Issue一览表中,可以看到,每个Issue的标题下面都带了诸如 “#21” 的编号。这样只要在提交信息时,带上 "#21" 就可以在Issue中看到该提交信息,使关联的提交一幕了然

Close Issue

在提交信息中以下列任一一种格式描述提交信息,对应的Issure就会被close。

  • fix #21
  • fixes #21
  • fixed #21
  • close #21
  • closes #21
  • closed #21
  • resolve #21
  • resolves #21
  • resolved #21

利用该方式,每次提交并且push后,就不必大费周章到GitHub的Issue中寻找相应的Issue 再手动Close。

GitHub 的其他功能

GitHub Pages

Github pages 主要用于在Github上托管静态HTML,以便发布项目的Web页。

由于可以绑定独立的域名,人们也经常利用结合这个功能的Octopress 来搭建博客

Github Jobs

面向全世界招聘程序员的职位公告板。Jobs

Github Enterprise

企业版

Github API

GitHub 面向开发者公开了API。 具体见 https://developer.github.com

Pull Request

按部就班地创建GitHub账号并公开自己的源码并不是什么难事。Pull Request 是社会化编程的象征,可以说给开源开发世界带来了一场革命。不会用这个功能,就等于不会用GitHub。。。(作者吹得有点过。。)

Pull Request 是GitHub的核心功能

Conversation

(以下技巧同样可以应用在其他评论中,如Issue)

在评论中应用表情

(同样应用在其他评论中,如Issue)在评论中输入 ":" 便会启动表情自动补全功能。只需要输入几个与表情相关的字母,系统就会为您筛选自动补全的对象。具体表情见:http://www.emoji-cheat-sheet.com

引用评论

只要选中需要引用的语句,然后按“R键”便会自动以引用的形式添加到评论栏,这样一来就可以轻松便捷地引用评论了

让Pull Request 更加有效的方法

在开发过程中发送Pull Request进行讨论

避免一个功能在开发完成后才收到来自设计或者实现方面的指正,导致代码需要大幅更改或者重新实现

**明确标出 “正在开发过程中” **

为了防止开发到一半的Pull Request 被合并,一般在标题前加上 “[WIP]” 字样,WIP 是 Work In Progress的简称

不进行Fork 直接从分支发送Pull Request

一般来说,在Github上修改对方的代码时,需要先将仓库Fork到本地,然后再修改代码,发送Pull Request。

但是,如果用户对该仓库有编辑权限,则可以直接创建分支,从分支发送 Pull Request

Git基本操作和GtHub 特殊技巧的更多相关文章

  1. Git学习系列之Git基本操作拉取项目(图文详解)

    前面博客 Git学习系列之Git基本操作推送项目(图文详解) 当然,如果多人协作,或者多个客户端进行修改,那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来. 大神们是不推荐使用 pu ...

  2. Git学习系列之Git基本操作推送项目(图文详解)

    前面博客 Git学习系列之Git基本操作提交项目(图文详解) 如果完成到一定程度,那么可以推送到远端在线仓库. 推送之前,请确保你已经设置了全局的 user.name 和 user.email, 如果 ...

  3. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

  4. Git学习系列之Git基本操作克隆项目(图文详解)

    不多说,直接上干货! 想必,能进来看我写的这篇博文的朋友,肯定是了解过. 比如SVN的操作吧,最常见的是 检出(Check out ...), 更新 (Update ...), 以及 提交(Commi ...

  5. git log 常用命令及技巧

    git log常用命令以及技巧 1.git log 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明.如果记录过多,则按Page Up.Pag ...

  6. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  7. git的几个小技巧

    git的几个小技巧 分享git的几个小技巧,后面会根据使用补充.目前包括git撤销本地修改.git回退到前n个版本.git多用户提交冲突解决.git 命令简化.欢迎大家补充^_* 1.git撤销本地修 ...

  8. Git-Runoob:Git 基本操作

    ylbtech-Git-Runoob:Git 基本操作 1.返回顶部 1. Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作 ...

  9. 学习如何运用GitHub网站+出现的问题+Git基本操作总结

    首先介绍一下GitHub网站: github是一个基于git的代码托管平台. GitHub 拥有一个非常鼓励合作的社区氛围.这一方面源于 GitHub 的付费模式:私有项目需要付费,而公共项目完全免费 ...

随机推荐

  1. C++操作xls

    http://pan.baidu.com/share/link?shareid=753113427&uk=3307409781

  2. iOS逆向开发(3):锁定APP的目标类与函数 | reveal | lldb | debugserver | 远程调试

    之前介绍了怎么获取APP的所有类的结构信息,这个有什么用呢?用处大了,比如以这一步为基础,下一步通过注入来做更多研究工作. 注入的最小单位是函数,实际上,编译执行的程序在编译后,类就不复存在了,留下来 ...

  3. C#.Net Core 操作Docker中的redis数据库

    做软件开发的人,会在本机安装很多开发时要用到的软件,比如数据库,有MS SQL Server,MySQL,等,如果每种数据库都按照在本机确实有点乱,这个时候我们就想用虚拟机来隔离,这样就不会扰乱本机一 ...

  4. Java BIO、NIO、AIO

    同步与异步 同步与异步的概念, 关注的是 消息通信机制 同步是指发出一个请求, 在没有得到结果之前该请求就不返回结果, 请求返回时, 也就得到结果了. 比如洗衣服, 把衣服放在洗衣机里, 没有洗好之前 ...

  5. spring boot多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  6. 翻译:window function(已提交到MariaDB官方手册)

    本文为mariadb官方手册:window functions的译文. 原文:https://mariadb.com/kb/en/window-functions-overview/ 我提交到Mari ...

  7. Squid实现正向代理及访问控制--技术流ken

    Squid及正向代理简介 Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证.Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据 ...

  8. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  9. [转]php hash_pbkdf2 和 node.js crypto.pbkdf2

    http://php.net/manual/en/function.hash-pbkdf2.php https://nodejs.org/api/crypto.html#crypto_crypto_p ...

  10. 【转载】window.open被浏览器拦截的解决办法

    今天在处理程序的过程中,发现window.open方法会被浏览器拦截,导致无法打开新页面,查阅相关资料后发现,主要原因是浏览器为了维护用户安全和体验,禁止在javascript中直接使用window. ...