一.什么是git,github?
GitHub 与Git 是完全不同的两个东西。在Git中,开发者将源代码存入名叫“Git 仓库”的资料库中并加以使用。而GitHub 则是在网络上提供Git 仓库的一项服务。也就是说,GitHub 上公开的软件源代码全都由Git 进行管理。
Pull Request 是指开发者在本地对源代码进行更改后,向GitHub中托管的Git 仓库请求合并的功能。
温馨提示:请安装最新的git软件。(这个很重要啊!)
二.部分git命令学习
1. 设置SSH Key:$ ssh-keygen -t rsa -C "your_email@example.com"
2. 查看id_rsa.pub : $ cat ~/.ssh/id_rsa.pub (里面有公钥)
3. 与GitHub通信:$ ssh -T git@github.com (然后会提示你输入密码:这时候输入你在创建公钥和私钥时的密码)
4. clone已有的仓库:$ git clone git@github.com:zhujianing/Hello-World.git(后面的链接是仓库的URL地址)
执行git clone命令后我们会默认处于master 分支下,同时系统会自动将origin 设置成该远程仓库的标识符。
5. $ git status 查看仓库的状态
6. 通过git add命令将文件加入暂存区:$ git add hello_world.php
7. 通过git commit命令提交历史记录:$ git commit -m "Add hello world script by php" 后面引号的部分是提交信息,是对这个提交的概述。可以将当前暂存区中的文件实际保存到仓库的历史记录中。通过这些记录,我们就可以在工作树中复原文件。向本地的分支提交更改
1) $ git commit -am "Add feature-C" 连续执行 git add 和 git commit
2) $ git commit –amend 修改上一条提交信息,可以使用git commit --amend命令。
3)
8. 通过git log命令查看提交日志:$ git log
1) --pretty=short:如果只想让程序显示第一行简述信息,可以在git log命令后加上--pretty=short。这样一来开发人员就能够更轻松地把握多个提交。
2) $ git log README.md:显示指定目录、文件的日志。只要在git log命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就会只显示与该文件相关的日志。
3) $ git log –p 如果想查看提交所带来的改动,可以加上-p参数,文件的前后差别就会显示在提交信息之后。
4) $ git log -p README.md 只查看README.md 文件的提交日志以及提交前后的差别。
5) git log --graph——以图表形式查看分支,用图表形式输出提交日志。
9. 执行push,GitHub 上的仓库就会被更新:$ git push (如果没有更新该仓库的权限就更新失败)
1) $ git push –u origin master推送至远程仓库
像这样执行git push命令,当前分支的内容就会被推送给远程仓库 origin 的master 分支。-u参数可以在推送的同时,将origin 仓库的master 分支设置为本地仓库当前分支的upstream(上游)。添加了这个参数,将来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从origin 的master 分支获取内容,省去了另外添加参数的麻烦。
10. 新建一个目录 $ mkdir git-tutorial
11. 初始化一个仓库(要使用Git进行版本管理,必须先初始化仓库): $ git init
(注意:先进入到新建的目录中,再进行初始化。如果初始化成功,执行了git init命令的目录下就会生成.git 目录。这个.git 目录里存储着管理当前目录内容所需的仓库数据。)
12. 新建一个文件 $ touch README.md
1) $ git diff:查看工作树和暂存区的差别
2) $ git diff HEAD 查看工作树与最新提交的差别,请执行以上命令。不妨养成这样一个好习惯:在执行git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的HEAD 是指向当前分支中最新一次提交的指针。
13. $ git branch:git branch命令可以将分支名列表显示,同时可以确认当前所在分支。左侧标有“*”(星号),表示这是当前所在的分支。
1) $ git branch –a 用git branch -a命令查看当前分支的相关信息。添加-a参数可以同时显示本地仓库和远程仓库的分支信息。
2) $ git branch -D pr1 删除分支pr1
14. $ git checkout -b——创建、切换分支,$git checkout -b feature-A 表示,创建名为feature-A 的分支。
feature-A 分支的更改不会影响到master分支,这正是在开发中创建分支的优点。只要创建多个分支,就可以在不互相影响的情况下同时进行多个功能的开发。
1) $ git branch feature-A 创建feature-A分支
2) $ git checkout feature-A 将当前分支切换为feature-A分支
3) 连续执行1和2 有 和15条规则 有同样的效果
4) $ git checkout - 切换回上一个分支
5) $ git checkout -b feature-Dorigin/feature-D origin为远程仓库的标识符,该语句表示在本地获取远程的feature-D分支,(即将feature-D分支复制到本地,名字也设为feature-D)
6)
15. git merge——合并分支 $ git merge --no-ff feature-A 合并feature-A 分支。为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。因此,在合并时加上--no-ff参数。合并时往往出现冲突,冲突解决后,执行gitadd命令与git commit命令。
16. $ git reset --hard 回溯历史版本
$ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d后面的数字是哈希值只有后面部分也可以。
17. $ git reflog 查看当前仓库执行过的操作的日志 (即查看操作的历史记录)。gitlog命令只能查看以当前状态为终点的历史日志。
18. $ git rebase -i HEAD~2 更改历史 将pick 改为 fixup
19. $ git remote add origin git@github.com:zhujianing/git-tutorial.git 设置本仓库的远程仓库。按照上述格式执行gitremote add命令之后,Git 会默认将git@github.com:zhujianing/git-tutorial.git远程仓库的名称设置为origin(标识符)。
我想origin的作用就是取别名吧,方便以后使用,不用输入长长的地址,直接使用别名。
20. 获取最新的远程仓库分支:$ git pull origin feature-D 获取远程仓库origin的最新分支feature-D,(即用最新分支更新本地分支)
如果两人同时修改了同一部分的源代码,push 时就很容易发生冲突。所以多名开发者在同一个分支中进行作业时,为减少冲突情况的发生,建议更频繁地进行push 和pull 操作。
21. $ git remote add upstreamgit://github.com/octocat/Spoon-Knife.git 给原仓库设置名称,将其作为远程仓库
22. $ git fetch upstream 从远程仓库实际获取(fetch)最新源代码,与自己仓库的分支进行合并。要让仓库维持最新状态,只需要重复这一工作即可。
$ git merge upstream/master 将已经fetch 完毕的“PR 发送者/master”的修改内容与当前分支进行合并。
23.
三.其他
1. pullrequest 流程(没有编辑权限的做法)
1) fock 别人的仓库到自己的github上
2) 确认分支 $ git branch –a
3) 将自己github上的仓库clone到本机上
$ git clone git@github.com:zhujianing/first-pr.git
4) 创建一个特性分支(创建特性分支是一个好习惯)$ git checkout -b work gh-pages
创建一个名为work 的分支,用来发送PullRequest。这个work分支就是这次的特性分支。
5) 在特性分支上做修改
6) 修改完以后,为特性分支创建远程分支。$ git push origin work (work为远程仓库的分支)
7) 在github上查看push后的仓库,发送pull request,点击create pull request
2. 推送至远程仓库
1) 在github上创建一个仓库
2) 添加一个远程仓库$ git remote add origin git@github.com:zhujianning/git-tutorial.git
3) git push——推送至远程仓库 $ gitpush -u origin master
4) 【推送至master 以外的分支 ,
1. 首先在本地创建一个分支$ gitcheckout -b feature-D
2. 将它push给远程分支$ gitpush -u origin feature-D 】
3. 从远程仓库获取
1) git clone——获取远程仓库 $git clone git@github.com:zhujianing/git-tutorial.git
同时系统会自动将origin 设置成该远程仓库的标识符。这样只能获取master分支。
2) 获取远程的其他分支$ git checkout -b feature-D origin/feature-D
3) 推送feature-D 分支$ git push
4. 获取最新的远程仓库分支 $ git pull origin feature-D
5. 查看差别
1) 查看分支间的差别
https://github.com/rails/rails/compare/4-0-stable...3-2-stable
2) 查看与几天前的差别,查看master 分支在最近7 天内的差别,可以像下面这样将时间加入URL。
https://github.com/rails/rails/compare/master@{7.day.ago}...master
3) 查看与指定日期之间的差别,想查看master 分支2013 年1 月1 日与现在的区别,可以将日期加入URL
https://github.com/rails/rails/compare/master@{2013-01-01}...master
7. 默认情况下系统会将空格的不同也高亮显示,所以在空格有改动的情况下会难以阅读。这时只要在URL 的末尾添加“?w=1”就可以不显示空格的差别。
8. 在GitHub 上,我们可以尽早创建Pull Request,从审查中获得反馈,让大家在设计与实现方面思路一致,借此逐渐提高代码质量。这个方法在团队开发大型项目时尤其有效,已将GitHub 运用到实际开发中的团队请务必试一试。
9. 将原仓库设置为远程仓库,从该仓库获取(fetch)数据与本地仓库进行合并(merge),让本地仓库的源代码保持最新状态
四.hub 命令
hub 命令将通常的git 命令进行封装并增加几项功能,就可以调用GitHub 的API 发送命令。