Git基本操作和GtHub 特殊技巧
《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 特殊技巧的更多相关文章
- Git学习系列之Git基本操作拉取项目(图文详解)
前面博客 Git学习系列之Git基本操作推送项目(图文详解) 当然,如果多人协作,或者多个客户端进行修改,那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来. 大神们是不推荐使用 pu ...
- Git学习系列之Git基本操作推送项目(图文详解)
前面博客 Git学习系列之Git基本操作提交项目(图文详解) 如果完成到一定程度,那么可以推送到远端在线仓库. 推送之前,请确保你已经设置了全局的 user.name 和 user.email, 如果 ...
- Git学习系列之Git基本操作提交项目(图文详解)
前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...
- Git学习系列之Git基本操作克隆项目(图文详解)
不多说,直接上干货! 想必,能进来看我写的这篇博文的朋友,肯定是了解过. 比如SVN的操作吧,最常见的是 检出(Check out ...), 更新 (Update ...), 以及 提交(Commi ...
- git log 常用命令及技巧
git log常用命令以及技巧 1.git log 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明.如果记录过多,则按Page Up.Pag ...
- SVN迁移到Git的过程(+ 一些技巧)
SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...
- git的几个小技巧
git的几个小技巧 分享git的几个小技巧,后面会根据使用补充.目前包括git撤销本地修改.git回退到前n个版本.git多用户提交冲突解决.git 命令简化.欢迎大家补充^_* 1.git撤销本地修 ...
- Git-Runoob:Git 基本操作
ylbtech-Git-Runoob:Git 基本操作 1.返回顶部 1. Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作 ...
- 学习如何运用GitHub网站+出现的问题+Git基本操作总结
首先介绍一下GitHub网站: github是一个基于git的代码托管平台. GitHub 拥有一个非常鼓励合作的社区氛围.这一方面源于 GitHub 的付费模式:私有项目需要付费,而公共项目完全免费 ...
随机推荐
- Retrofit2 完全解析 探索与okhttp之间的关系
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/51304204: 本文出自:[张鸿洋的博客] 之前写了个okhttputils的 ...
- [译]ASP.NET Core中使用MediatR实现命令和中介者模式
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何 ...
- Java I/O : Bit Operation 位运算
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- ②萨克斯,音符的悠扬(Session管理)
一.前言 小朽不才,最近喜欢上了萨克斯,一年计划[传送门]中的实行.就伴随着一首萨克斯,整理了下Session管理和Session四种技术. 保存状态: #网址重写(URL rewriting) #隐 ...
- .Net程序员学用Oracle系列(14):子查询、集合查询
1.子查询 1.1.子查询简介 1.2.WITH 子查询 2.集合查询 2.1.UNION 和 UNION ALL 2.2.MINUS 2.3.INTERSECT 2.4.集合运算与 ORDER BY ...
- WebSocket 协议
1.1 背景知识 由于历史原因,在创建一个具有双向通信机制的 web 应用程序时,需要利用到 HTTP 轮询的方式.围绕轮询产生了 “短轮询” 和 “长轮询”. 短轮询 浏览器赋予了脚本网络通信的编程 ...
- 为什么你作为一个.NET的程序员工资那么低?
最近看到很多抱怨贴,也许有一定的道理,但是你想过没,为什么大部分.NET程序员工资相对低?我个人是这么看的: 大批半罐子水的程序员,永远被局限在.NET的原始的小圈圈里.前端不会(你放弃了一项很重要的 ...
- HTML语法介绍
一 基本标签(块级标签和内联标签) <hn>: n的取值范围是1~6; 从大到小. 用来表示标题. <p>: 段落标签. 包裹的内容被换行.并且也上下内容之间有一行空白. &l ...
- Java基础系列——序列化(一)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6797659.html 工作中发现,自己对Java的了解还很片面,没有深入的研究,有很多的J ...
- 【SQL跟踪工具】SQL Profiler 跟踪器
什么是SQL Profiler SQL Server Profiler 是一个功能丰富的界面,用于创建和管理跟踪并分析和重播跟踪结果. 事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分 ...