Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
可视化软件
官网在这里:https://www.git-scm.com/,在git 官网上这种GUI工具多达十几款,在Mac平台我推荐一两款好用的软件GUI,官网GUI客户端列表:https://www.git-scm.com/downloads/guis
- DiffMerge 是一款可视化的文件比较(也可进行目录比较)与合并工具。
该软件主要具有文件差异比较、自动化的文件合并、以及文件夹差异比较这三大功能。这里下载:[http://sourcegear.com/diffmerge/](http://sourcegear.com/diffmerge/)
- SourceTree (Windows/Mac)免费
官网在这里:[https://www.sourcetreeapp.com/](https://www.sourcetreeapp.com/)
- Gitup(Mac)免费开源
好玩的Gitup是 Mac OS X 的全功能开源 Git 客户端,提供快速,安全的操作,直接在硬盘上与 Git 数据库交互,操作库的图而不是操作 commits,官网在这里:[http://gitup.co/](http://gitup.co/)
git 安装
Windows
安装git for window 安装TortoiseGit-1.8.16.0-64bit.msi 配置path C:Program FilesGitin 详见enter link description here
Mac
- 最为简单的方式是安装 .dmg 格式的安装包。其中带有一个正在解包图标的文件(扩展名为 .pkg )是 Git 的安装程序
- 点击扩展名为 .pkg 的安装程序,开始 Git 的安装
- 安装完毕,git 会被安装到 /usr/local/git/bin/ 目录下。重启终端程序,才能让 /etc/paths.d/git 文件为 PATH 环境变量中添加的新路径注册生效。然后就可以在终端中直接运行 git 命令了。
- 下载地址:enter link description here
git 配置
git config --global user.name "xxx" //配置用户名 git config --global user.email "xxx@xxx.com" //配置邮件 git config --list //检查已有的配置信息
git 使用
基础操作
git init //初始化git仓库 git add . //添加所有文件到暂存区 git status //查看Git仓库状态,要随时掌握工作区的状态 git commit -m 'xxx' //提交已添加的文件到git仓库 git commit -am 'xxx' //将add和commit合为一步 git log /git reflog //显示最近到最远的提交日志(历史)/(未来) git reset --hard <commitId> //HEAD^--返回上个版本, //HEAD~100--返回上100个版本 //commit_id--对应版本的commitId
远程仓库
创建SSH Key
-
打开终端,输入 ssh-keygen -t rsa -C "418120186@qq.com" 邮箱更新为自己的 回车保存默认位置 输入密码,用来加密私钥(以后就要用这个密码)
- 密钥存放在主文件夹的.ssh文件夹内
- 打开文件备份 id_rsa(私钥) ; id_rsa.pub(公钥)两个文件,打开公钥,复制所有内容
与远程仓库绑定
- 在远程服务器,如coding/github页面内找到
添加公钥选项
,粘贴刚刚复制的内容,添加即可.
远程命令
-
git remote
命令就用于管理主机名。git remote add <主机名> <网址> //用于添加远程主机 git remote rm <主机名> //用于删除远程主机 git remote rename <原主机名> <新主机名> //用于远程主机的改名 git remote (-v) //要查看远程库的信息(显示更详细的信息)
-
git fetch
命令用于取回远程更新至本地git fetch <远程主机名> //将某个远程更新,全部取回本地 git fetch <远程主机名> <分支名> //取回特定分支的更新 //所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取。
-
git pull
取回远程主机某个分支的更新,再与本地的指定分支合并。git pull origin next(:maste) //取回origin主机的next分支,与当前(本地的master)分支合并
-
git push
命令用于将本地分支的更新,推送到远程主机git push origin <本地分支名>:<远程分支名> //提交本地的某分支,与origin主机的某分支合并 git push -u origin master //将本地master分支推送到origin主机,同时指定origin为默认主机,之后就可以不加任何参数使用git push git push --all origin //将本地所有分支推送到origin主机 git push origin master //将master分支推送到origin远程主机 git push origin --tags //推送包含标签(tag) git push -f //强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容 git clone <url> //克隆远程仓库到本地 git clone <版本库的网址> <本地目录名> //克隆远程仓库到本地指定文件名
-
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
分支
git branch //查看所有分支 git branch <name> //创建分支 git checkout <name> //切换分支 git checkout -b <name> //创建并切换分支 git checkout -b newBrach origin/master //在origin/master的基础上,创建一个新分支 git merge <name> //合并某分支到当前分支 git branch -d <name> //删除分支 git branch -a //显示所有分支 git branch -r //显示所有远程分支 git branch --merged //显示所有已合并到当前分支的分支 git branch --no-merged //显示所有未合并到当前分支的分支 git branch -m master master_copy //本地分支改名
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;bug
分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;feature
分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
标签
git tag <name> //用于新建一个标签,默认为HEAD,也可以指定一个commit id; git tag -a <tagname> -m "blablabla..."//可以指定标签信息; git tag -s <tagname> -m "blablabla..."//可以用PGP签名标签; git tag //查看所有标签 git push origin <tagname> //推送一个本地标签; git push origin --tags //推送全部未推送过的本地标签; git tag -d <tagname> //删除一个本地标签; git push origin :refs/tags/<tagname> //删除一个远程标签。
其他使用场景
- 保存进度
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
- 合并分支
git merge --no-ff -m "merge with no-ff" dev
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
- 撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,则需要版本回退,不过前提是没有推送到远程库。
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git相关学习资源
- git的详细介绍:Git详解之一:Git起步
- git安装和配置:Git安装与配置
- git与TortoiseGit(小乌龟)的基本操作:Git与TortoiseGit基本操作
- git的基础教程:廖雪峰的gitgit教程
- git的使用流程:Git使用教程
- git远程操作详解:阮一峰的Git远程操作详解
- git常用命令总结:git常用命令总结
- 搭建基于SSH的Git服务器:Windows下搭建基于SSH的Git服务器;自己动手搭建Git服务器-Gitblit
- git整体介绍:30 分钟 git 命令入门到放弃 - 掘金