1.1 什么是 GitHub
GitHub 是为开发者提供 Git 仓库的托管服务。这是一个让开发者与朋友、同事、同学及陌生人共享代码的完美场所。
1.1.5 使用GitHub前配置
使用git命令生成一个SSH key
$ ssh-keygen -t rsa -C "your_email@example.com"
查看生成的key使用命令
$ cat ~/.ssh/id_rsa.pub
然后在gitHub用户配置Account settings里加入,测试是否配置成功
$ ssh -T git@github.com
1.2 git是什么
Git是分散性版本管理系统.
集中型与分散型区别
Svn将仓库集中存放在服务器之中,所以只存在一个仓库。这种版本管理系统会被称作集中型,集中性便于管理.
SVN一旦服务器无法连接,开发就无法协作. 由于所有人提交都在主干容易冲突,SVN创建分支是复制一份文件,而Git是克隆一份配置,SVN切换分支很慢,git瞬间完成
Git将仓库Fork出来,仓库存放在本地,Git可以不依赖网络,所有用户Fork出来的仓库可以互相pull和push, Git的主干master也是分支只是不用于开发,作为稳定提交版本。
1.3 Git基本操作
初始化一个仓库:
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
查看文件状态:
$ git status
把新建的文件加入缓存区
$ git add ReadMe.md//让文件成为 Git 仓库的管理对象
$ git add . //提交所有未追踪的文件
提交文件:
$ git commit//git commit进入编辑器填写提交信息退出编辑器
按ESC键,以确保您不在编辑模式,然后键入:wq
$ git commit -m "test commit"//test commit 提交信息
$ git commit -am "Add feature-D" //可以省略add
$ git commit --amend //修改刚提交的信息
查看提交日志:
$ git log //只能查看当前状态为终点的日志
$ git reflog //查看当前仓库所有操作日志 就算回退到2版本 也还可以查看到3 回滚错误时
$ git log --graph //图表可以很清楚查看合并,创建
$ git log --perrty=short //只显示提交信息的第一行
$ git log ReadMe.md //只显示指定目录、文件的日志
$ git log -p //显示文件的前后差别
$ git log -p ReadMe.md //指定文件前后差别
更改前后区别:
$ git diff //查看当前工作树与暂存区的差别。 如果工作树和暂存区的状态并无差别,结果什么都不会显示
$ git diff HEAD //查看最新提交与上次提交区别
分支操作:
$ git branch //查看所有分支
$ git branch -a //-a参数可以同时显示本地仓库和远程仓库的分支信息
$ git checkout -b feature-A //创建并且切换到feature-A分支
$ git branch -d feature-A //删除feature-A分支
$ git checkout master //切换master分支
$ git merge --no-ff feature-A//将featurea-A分支合并到当前分支
更改提交操作:
$ git reset --hard 83d261f168a0c17c83be9d727fc6c3a883457143//回退版本到创建featura-A前
压缩提交历史:
$ git rebase -i HEAD~2 //把最近2次历史 压缩为一次 编辑器中把要压缩的Pick改为 fixup
推送到远程仓库:
$ git remote -v //查看设置的远程地址
$ git remote rm upstream //删除一个远程地址
$ git remote add tutorialGitHub git@github.com:vicococ/git-tutorial.git //创建一个远程地址 名称为tutorialGitHub
$ git push -u tutorialGitHub master //把本地的master分支推送到远程master分支
-u参数可以在推送的同时,将 tutorialGitHub 仓库的 master 分支设置为本地仓库当前分支的 upstream(上游),
这样后面就可以不加任何参数使用git push。
git pull从远程获取内容时。可以省略主机名,本地仓库当前分支就可以直接从 tutorialGitHub 的 master 分支获取内容,
远程仓库获取:
$ git clone git@github.com:vicococ/git-tutorial.git //获取一个github项目 支持多种协议,除了HTTP(s)以外,还支持SSH、git各种协议
$ git clone -o tutorial git@github.com:vicococ/git-tutorial.git 获取并命名仓库为tutorial
$ git checkout -b feature-D origin/feature-D //获取远程仓库的feature-D项目 克隆版本库的时候,
所使用的远程仓库自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
$ git push//推送代码 无需加参数
获取最新数据:
$ git pull tutorialGitHub feature-D //获取 feature-D分支 与 当前分支合并
$ git pull tutorialGitHub feature-D:master //获取tutorialGitHub主机feature-D分支和本地的master分支合并
将fork的分支获取原分支最新数据:
$ git remote add upstream https://github.com/ituring/first-pr.git //设置原分支主机
$ git fetch upstream gh-pages:latestCode//获取远程分支gh-pages到本地创建一个latestCode分支
$ git merge latestCode //合并latestCode分支到master
第二种方式:
$ git fetch upstream gh-pages //获取远程的 gh-pages分支
$ git merge upstream/gh-pages //和当前分支合并
pull和fetch的区别
git fetch:相当于是从远程获取最新版本到本地,不会自动merge,pull会自动merge 多人协作用fetch