Git基本操做和GtHub 特殊技巧

《GitHub 入门与实践》 笔记git

了解GitHub

Git 和 GitHub 的区别

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

社会化编程

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

Git 操做

Git 基本操做

  • git init ——初始化仓库
  • git status ——查看仓库状态
  • git add ——向暂存区添加文件
  • git commit ——保存仓库的历史记录,.能够将当前暂存区中的文件实际保存到仓库的历史记录中.经过这些记录,咱们能够在工做树中复原文件
    • -m参数:参数后为提交信息的概述(单行)
    • 若是想要记述得更加详细,不加-m,执行后编辑器会启动,格式以下shell

      第一行:用一行文字简述提交的更改内容
        第二行:空行
        第三行之后:记述更改的缘由和详细内容
  • 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 .  /或者指定文件

分支操做api

#建立新分支,而且切换到新分支
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 —— 建立、切换分支
    • 建立分支,并切换到分支,并提交ruby

      $ 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 - , 用"-" 能够代替分支名markdown

  • 特性分支:是集中实现单一特性(主题),初次以外不进行任何做业的分支。
  • 主干分支:能够发布软件的稳定分支。有时能够用标签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

相关文章
相关标签/搜索