一、安装 Git
- 官网直接下载
- git --version // 查看版本号
二、设置 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设置大小写敏感
三、基本工作流程
先附上 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 更新远程引用和相关的对象
四、Git 工具
桌面工具
Git 官方的图形化界面
- Git GUI (优势:commit 前代码改动的浏览和挑选)
- 命令行敲 git gui
- Windows Explorer,适当目录下,右键菜单,Git GUI Here
- Gitk (优势:显示版本树、历史信息)
- 命令行敲 gitk --all &
- Git GUI -> 菜单 -> 版本库 -> 图示所有分支的历史
其他备选
- 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
五、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
六、常见问题
1、Git stash暂存修改
当我们在开发项目的时候,突然来一个变更需要修改,我们除了将当前项目提交(commit)后切换(checkout) 到其他分支外,我们还可以先将当前的修改暂存(stash)起来,然后再切换(checkout)到其他分支,而不需要提交(commit),这样就可以减少一个 commit (虽然可以使用 git commit --amend 来修改最后一次提交 )
暂存修改
- git stash 或 git stash save "注释" 来暂存修改,已经被 git 跟踪,只是修改了代码(而不是新增)文件
- 如果有新添加的文件,那么就需要添加 -a 参数(如,git stash -a 或 git stash save -a "注释"),或先 git add . 然后再使用 git stash 或 git stash save "注释" 来暂存修改
取出修改
- 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 清空所有的修改暂存
2、查看 Git日志
git log
- 显示所有提交过的版本信息
- 加上参数 --pretty=oneline,过滤显示版本号和提交时的备注信息
git reflog
- 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
自由穿梭 Git版本
- git reset --hard HEAD~1 退回到上一个版本
- 通过 git reflog 找到被删除的commitid
- git reset --hard commitid 就可以回到指定版本
3、git cherry-pick挑拣提交
获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就可以使用git cherry-pick
- 1、首先,切换到develop分支,敲 git log 命令,查找需要合并的commit记录,比如commitID:7fcb3defff;
- 2、然后,切换到master分支,使用 git cherry-pick 7fcb3defff 命令,就把该条commit记录合并到了master分支,这只是在本地合并到了master分支;
- 3、最后,git push 提交到master远程,至此,就把develop分支的这条commit所涉及的更改合并到了master分支。
常用options:
- --continue 继续当前的chery-pick序列
- --quit 退出当前的chery-pick序列
- --abort 取消当前的chery-pick序列,恢复当前分支
- -n, --no-commit 不自动提交
- -e, --edit 编辑提交信息
4、tag 和 branch 的区别
- tag 对应某次 commit, 是一个点,是不可移动的。
- branch 对应一系列 commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
- 创建 tag 是基于本地分支的 commit,而且与分支的推送是两回事,就是说分支已经推送到远程了,但是你的 tag 并没有,如果把 tag 推送到远程分支上,需要另外执行 tag 的推送命令。
5、如何切换链接git服务器的方式是ssh还是http
git remote set-url origin <要修改的url>
系统学习
《 Pro Git 》
《 Git Magic 》
《 GitHub秘籍 》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。