一、什么是GitHub?
GitHub是一家公司,由 Chris Wanstrath, PJ Hyett 与 Tom Preston Werner 三位开发者在2008年4月创办;
2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。截止目前,GitHub 已经发展成全球最大的开源社区。
二、GitHub与Git的关系
Git 是一款免费、开源的分布式版本控制系统,由Linux 发明者 Linus Torvalds 开发;
GitHub 是提供基于 Git 的版本托管服务,就是说GitHub 上托管的所有项目代码都是基于 Git 来进行版本控制的,So,Git 只是 GitHub 上用来管理项目的一个工具,而GitHub 的功能远不止此。
三、加入Github
1、去 GitHub 官网「How people build software · GitHub」注册「Sign Up」个账号;
2、创建自己的项目(点击顶部导航栏的 + 可以快速创建一个项目);
四、GIT的基础操作
安装:
Mac:https://sourceforge.net/projects/git-osx-installer/(一般Mac会自带Git)
Windows:https://git-for-windows.github.io/
Linux:apt-get install git
基本命令:
注:本文所有的命令都是在Linux上操作的
命令行输入git,出现以下提示,Git安装成功:
我们现在在root目录下新建一个test,然后进入到test目录下:
mkdir test # 创建test文件夹 cd test # 切换到test目录 touch a.txt # 新建a.txt文件
如图
当前目录还不是一个 Git 仓库,
git init # 初始化git仓库
Untracked files ,就是说 a.txt 这个文件还没有被跟踪,还没有提交在 git 仓库,提示你可以使用 git add 去操作你想要提交的文件
git status # 查看状态
git add # 添加到仓库缓存中
git commit -m 'first commit' # 正式进行了第一次提交
git log # 查看所有产生的 commit 记录
git add & git commit # 提交的合并操作
git branch a #创建a分支
git checkout a # 切换到a分支上
git checkout -b a #合并 与 切换 同时操作
git merge a # 合并a分支
git branch -d a # 删除分支 git branch -D a # 强制删除a分支
git tag v1.0 # 创建标签
git checkout v1.0 # 切换标签
向GitHub提交代码
1、SSH
SSH是一种网络协议,用于计算机之间的加密登录。大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置;
2、生成SSH key
Linux和Mac都默认安装了SSH,命令行输入ssh查看
ssh-keygen -t rsa #指定 rsa 算法生成密钥
输入 ssh-keygen -t rsa,指定 rsa 算法生成密钥,接着连续三个回车键(不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub , id_rsa 是密钥,id_rsa.pub 就是公钥
Linux/Mac 系统 在 ~/.ssh 下,win系统在 C/Documents and Settings/username/.ssh 下,都是隐藏文件
git push origin master # 把本地代码推到远程master分支 git pull origin master # 把远程最新代码更新到本地 # 一般在 push 之前先 pull ,这样不容易冲突。
git clone git@github.com:/Clint-cc/test.git #将test项目clone到本地
五、GIT的进阶操作
设置用户名和邮箱
我们每一次commit都会产生一条log,这条log标记了提交人的姓名与邮箱,以便其他人方便的查看与联系提交人,所以在进行提交代码的第一步就是要设置自己的用户名与邮箱
git config —global user.name "clint-cc" git config —global user.email "clint1801@163.com"
以上进行了全局配置,有时候我们的某一个项目想要用特定的邮箱,这个时候只需切换到你的项目, --global 参数去除,重新执行一遍
alias
有些频繁的操作,我们可以给命令起个简短的别名,下次用别名执行
git config global alias.co checkout # 给命令起别名
PS: 比较清晰,分支走向明显的命令
git log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
但是每次如果要输如这么一大串那就不方便了,这时我们就可以用alias命令简化
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
以后直接输入git lg就行了
其他配置
git config --global core.editor "vim" # 设置Editor使用vim
git config --global color.ui true # 开启给 Git 着色
git config --global core.quotepath false # 设置显示中文文件名
diff
git diff # 比较当前文件和暂存区文件差异, git diff <$id1> <$id2> # 比较两次提交之间的差异 git diff <branch1>..<branch2> # 在两个分支之间比较 git diff staged # 比较暂存区和版本库差异
checkout
切换
git checkout develop #切换到 develop 分支 git checkout v1.0 #切换v1.0标签
撤销
git checkout a.txt #把原文件还原(之前的操作撤销)
PS:checkout 命令只能撤销还没有 add 进暂存区的文件
stash
git stash # 把当前分支所有没有 commit 的代码先暂存起来
git stash apply # 代码还原
git stash drop # 把最近一条的 stash 记录删除
git stash pop # 来代替apply 命令,pop 跟 apply 的唯一区别就是 pop 不但把代码还原,还自动把这条 stash 记录删除,省去drop一次
merge & rebase
# 将a分支合并到master上 # 使用merger git checkout master git merge a # 使用rebase git checkout master git rebase a # rebase 跟 merge 的区别你们可以理解成有两个书架,你需要把两个书架的书整理到一起去,第一种做法是 merge ,比较粗鲁暴力,就直接腾出一块地方把另一个书架的书全部放进去,虽然暴力,但是这种做法你可以知道哪些书是来自另一个书架的;第二种做法就是rebase ,他会把两个书架的书先进行比较,按照购书的时间来给他重新排序,然后重新放置好,这样做的好处就是合并之后的书架看起来很有逻辑,但是你很难清晰的知道哪些书来自哪个书架的。
团队合作利器:Git 分支管理
Git Flow 是一种比较成熟的分支管理流程