《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. Java核心技术及面试指南 2.3.6 String相关的面试题答案

    2.3.6.1 String是最基本的数据类型吗?能不能被继承? String不能被继承,它是一个对象 2.3.6.2 String s = new String("xyz");创 ...

  2. linux取IP的几个方法

    ifconfig eth0|grep " inet add"|cut -d":" -f2|cut -d " " -f1 ifconfig e ...

  3. 05 Tensorflow中变量的初始化

    打开Python Shell,输入import tensorflow as tf,然后可以执行以下代码. 1.创建一个2*3的矩阵,并让所有元素的值为0.(类型为tf.float) a = tf.ze ...

  4. Win32之内存管理之虚拟内存跟物理内存

     Win32之内存管理 一丶虚拟内存和物理内存 我们知道每个应用程序都有自己独立的4GB空间.  假设A进程的 地址123 存储了10  那么B进程的123地址 存储了20 那么它们两个是互不影响的. ...

  5. Linux Namespace : User

    User namespace 是 Linux 3.8 新增的一种 namespace,用于隔离安全相关的资源,包括 user IDs and group IDs,keys, 和 capabilitie ...

  6. win8 notepad++ 设置无法保存

    前些天买了新笔记本.装的是win8 ,后来装了notepad++ ,最新版的,改了字体,下次从新打开之后,发现字体改动无效.后来试了一下“管理员身份运行”,再次打开,保存就有效.但总不能每次都那样去右 ...

  7. MySQL EXPLAIN 命令: 查看查询执行计划

    MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...

  8. Go基础系列:Go接口

    接口用法简介 接口(interface)是一种类型,用来定义行为(方法). type Namer interface { my_method1() my_method2(para) my_method ...

  9. 本人开源项目 Lu-Rpc

    Lu-Rpc 是个专为学习者准备的 RPC 框架, 初始架构非常简单, 可供初学者扩展和学习. Lu 可以认为是中文世界的撸, 即撸 Rpc--- 造个 Rpc 轮子. Lu-Rpc 架构图如下: L ...

  10. 【golang-GUI开发】Qt5的安装

    golang一直被认为没有好的GUI库,事实并非如此. 目前有基于gtk+3.0的gotk3:https://github.com/gotk3/gotk3 以及接下来我们要说的qt:https://g ...