1、安装 Git
2、设置 Git
生成密钥
- 查看是否已经有了ssh密钥:cd ~/.ssh
- 若是没有密钥则不会有此文件夹,有则备份删除。
- ssh-keygen -t rsa -C "xxx@xxx.com"
上传密钥
- 以github为例,依次点击Setting->SSH and GPB keys->New SSH Key,复制粘贴生成的.pub文件中的秘钥
- 而后就能够用ssh协议,拉取推送代码了
设置全局基础配置
- git config --global user.name "xxx" // 请换成你本身的名字
- git config --global user.email "xxx@xx.com" // 请换成你本身的邮箱
- git config --global push.default simple // 要求 Git 版本 1.9.5 以上
- git config --global core.autocrlf false // 让Git不要管Windows/Unix换行符转换的事
- git config --global core.ignorecase false // windows设置大小写敏感
3、基本工做流程
先附上
Git备忘清单
记着先pull再push,冲突都在本地解决
最后点赞收藏一条龙,硬核植入,哈哈
开始一个工做区
- init 建立一个空的 Git 仓库或从新初始化一个已存在的仓库
- clone 使用 SSH(推荐) 或 HTTP 协议,克隆仓库到一个新目录(推荐)
- git config --global credential.helper store // 记住git账号密码(http时避免每次提交都要输入)
在当前变动上工做
- add 添加文件内容至索引
- mv 移动或重命名一个文件、目录或符号连接
- restore 恢复工做区文件
- rm 从工做区和索引中删除文件
检查历史和状态
- bisect 经过二分查找定位引入 bug 的提交
- diff 显示提交之间、提交和工做区之间等的差别
- grep 输出和模式匹配的行
- log 显示提交日志
- show 显示各类类型的对象
- status 显示工做区状态
扩展、标记和调校您的历史记录
- branch 列出、建立或删除分支
- commit 记录变动到仓库
- merge 合并两个或更多开发历史
- rebase 在另外一个分支上从新应用提交
- reset 重置当前 HEAD 到指定状态
- switch 切换分支
- tag 建立、列出、删除或校验一个 GPG 签名的标签对象
协同
- fetch 从另一个仓库下载对象和引用
- pull 获取并整合另外的仓库或一个本地分支
- push 更新远程引用和相关的对象
4、Git 工具
桌面工具
Git 官方的图形化界面html
- Git GUI (优点:commit 前代码改动的浏览和挑选)
- 命令行敲 git gui
- Windows Explorer,适当目录下,右键菜单,Git GUI Here
- 命令行敲 gitk --all &
- Git GUI -> 菜单 -> 版本库 -> 图示全部分支的历史
其余备选git
- TortoiseGit (Windows)
- SourceTree (OS X 和 Windows)
Git flow工具
安装
OS X
brew install git-flow
Linux
apt-get install git-flow
Windows
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
5、Git flow工做流
约定

使用
- 初始化: git flow init
- 开始新Feature: git flow feature start MYFEATURE
- Publish一个Feature(也就是push到远程): git flow feature publish MYFEATURE
- 获取Publish的Feature: git flow feature pull origin MYFEATURE
- 完成一个Feature: git flow feature finish MYFEATURE
- 开始一个Release: git flow release start RELEASE [BASE]
- Publish一个Release: git flow release publish RELEASE
- 发布Release: git flow release finish RELEASE
- 别忘了git push --tags
- 开始一个Hotfix: git flow hotfix start VERSION [BASENAME]
- 发布一个Hotfix: git flow hotfix finish VERSION
6、常见问题
一、Git stash暂存修改
当咱们在开发项目的时候,忽然来一个变动须要修改,咱们除了将当前项目提交(commit)后切换(checkout) 到其余分支外,咱们还能够先将当前的修改暂存(stash)起来,而后再切换(checkout)到其余分支,而不须要提交(commit),这样就能够减小一个 commit (虽然可使用 git commit --amend 来修改最后一次提交 )github
暂存修改windows
- git stash 或 git stash save "注释" 来暂存修改,已经被 git 跟踪,只是修改了代码(而不是新增)文件
- 若是有新添加的文件,那么就须要添加 -a 参数(如,git stash -a 或 git stash save -a "注释"),或先 git add . 而后再使用 git stash 或 git stash save "注释" 来暂存修改
取出修改bash
- git stash pop 取出最近的一个暂存,并从 stash list 中删除该暂存记录
- git stash apply stash@{id} 取出某个暂存记录,但不会删除记录,stash@{id}里面的id默认从0开始,最近的暂存为0
暂存列表服务器
- git stash list 查看 stash 列表
- git stash drop stash@{id} 删除某一个修改暂存
- git stash clear 清空全部的修改暂存
二、查看 Git日志
git log
- 显示全部提交过的版本信息
- 加上参数 --pretty=oneline,过滤显示版本号和提交时的备注信息
git reflog
- 查看全部分支的全部操做记录(包括已经被删除的 commit 记录和 reset 的操做)
自由穿梭 Git版本
- git reset --hard HEAD~1 退回到上一个版本
- 经过 git reflog 找到被删除的commitid
- git reset --hard commitid 就能够回到指定版本
三、git cherry-pick挑拣提交
获取某一个分支的单笔提交,并做为一个新的提交引入到你当前分支上。当咱们须要在本地合入其余分支的提交时,若是咱们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就可使用git cherry-pickapp
- 一、首先,切换到develop分支,敲 git log 命令,查找须要合并的commit记录,好比commitID:7fcb3defff;
- 二、而后,切换到master分支,使用 git cherry-pick 7fcb3defff 命令,就把该条commit记录合并到了master分支,这只是在本地合并到了master分支;
- 三、最后,git push 提交到master远程,至此,就把develop分支的这条commit所涉及的更改合并到了master分支。
经常使用options:
- --continue 继续当前的chery-pick序列
- --quit 退出当前的chery-pick序列
- --abort 取消当前的chery-pick序列,恢复当前分支
- -n, --no-commit 不自动提交
- -e, --edit 编辑提交信息
四、tag 和 branch 的区别
- tag 对应某次 commit, 是一个点,是不可移动的。
- branch 对应一系列 commit,是不少点连成的一根线,有一个HEAD 指针,是能够依靠 HEAD 指针移动的。
- 建立 tag 是基于本地分支的 commit,并且与分支的推送是两回事,就是说分支已经推送到远程了,可是你的 tag 并无,若是把 tag 推送到远程分支上,须要另外执行 tag 的推送命令。
五、如何切换连接git服务器的方式是ssh仍是http
git remote set-url origin <要修改的url>
系统学习
《 Pro Git 》
《 Git Magic 》
《 GitHub秘籍 》