## 管理代码的版本(代码) (分布式git) (集中式 svn)
- 记住是谁提交的东西
- 可以保存每个阶段的内容(备份功能)
- 可以实现历史穿越
- github 开源 多端共享
- 团队协作
> linus开发的linux系统,开发git可以实现自动合并代码,比较diff
## 安装git
- (最新版的如果提交过一次后会记住用户名和密码)
- 下载地址https://git-scm.com/
## homebrew mac的包管理器
- brew install git
- brew install node
- brew install mongodb
> https://brew.sh/index_zh-cn.html
## 使用git
- 界面化操作GUI(source tree 编辑器自带git功能)
- 命令行操作CLI
## mac下
- iterm2 + oh-my-zsh
> 如果安装过xcode 会自动安装git
## 查看git版本
```
git --version
```
## 告诉git是谁提交的代码
- 如果不配置 则不能提交代码
```
git config --global user.name 用户名
git config --global user.email 邮箱号
git config --list
```
## 初始化git(不能嵌套使用git)
- 以某个文件夹作为git管理的目录
```
git init
```
> 初始化后会产生一个.git文件夹
## 要提交git前先查看信息
```
git status
```
> 如果是红色表示未添加到暂存区中,绿色是添加到暂存区中,如果干净了表示 三个区的内容全部相同
## 添加暂存区
```
git add . 或者 -A 或者 文件名
```
## 添加到历史区
- -m参数必须添加
```
git commit -m"initial"
```
> 第一次提交叫根提交
## 查看提交历史
```
git log
```
## 比较区的不同
```
git diff
```
## 穿越
- 从暂存区覆盖工作区
```
git checkout 文件名
```
## 将本次的暂存区回到上一次
```
git reset HEAD 文件名
```
## 回滚历史区
```
git reset --hard 版本号
```
## 查看所有的版本号
```
git reflog
```
## 查看分支
```
git branch
```
## 创建分支
```
git branch dev
```
## 切换分支
```
git checkout 分支名
```
## 删除分支
- 不能在当前分支上
```
git branch -D 分支名
```
## 创建并切换分支
```
git checkout -b 分支名
```
## 在分支上添加文件
- 需要提交后才能归这个分支所有,否则你改的只是工作区内容
## 合并分支
```
git merge 分支名
```
> 默认会将分支上所有提交的内容全部合并,可以选择cherry-pick来合并某一个历史
## 添加暂存区并且提交
- 只针对提交过的文件
```
git commit -a -m 'info'
```
> 提交到谁的身上,本次的结果才归某个分支所有,如果再次更改分支上的内容,不提交是无法切换分支的,或者你可以先暂存起来
## 必须是历史区的结果
- 空文件夹默认不会提交(加一个.gitkeep文件)
- 默认添加.gitignore文件
```
git init
git add .
git commit -m""
```
## 链接远程仓库
```
git remote add 别名 https://github.com/zhufengzhufeng/2017008node_home.git
```
## 删除远程仓库
```
git remote -v 查看
git remote rm 别名
```
## 推送到远程仓库
```
git push 别名 master
```
## 拉取github上的代码
```
git clone 远程地址 文件夹的名字
```
## 共享仓库
- settings > collaborators 添加贡献者
## 发布静态网站
- 要求有一个固定的分支gh-pages
- 将静态内容推送到这个分支上
```
git checkout -b gh-pages
touch index.html
git add .
git commit -m "static"
git push origin gh-pages
```
## 拉取最新代码
```
git pull origin master
```
## 强制推送本地的代码
```
git push origin master --force
```
> 在推送时可能需要先拉取远程的内容,合并后再次推送,如果产生冲突 需要解决冲突
## fork(叉子)
- fork来的代码,如果别人更新了,不会影响我fork的代码
- 将fork的代码改正后,发送和并请求,请求别人帮我们合并
- 需要提交自己的更新,发送给被fork的人,请求合并
## linux命令
- pwd (print working directory) 打印当前目录
- rm -rf .git (删除文件夹)
- mkdir (创建目录)
- ls (list show 显示所有列表)
- cd (change directory 改变目录)
- touch (创建一个空文件)
- vi 文件名(编辑文件)
- i 插入模式
- esc+:wq 保存并退出
- cat 文件名查看文件内容