Git使用总结
一 前言
本文是参考和学习了网上资料之后的总结,不当之处希望大家及时指正。
1、 Git教程
2、 Git官方文档
二 安装Git
1、 Linux
CentOS
yum install git
Ubuntu
apt-get install git
2、 Mac OS
两种方法:
安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。
从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode。
选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,
选择“Command Line Tools”,点“Install”就可以完成安装了。
3、 Windows
下载安装git shell,或者github客户端。
设置用户名和邮箱:
git config --global user.name "you_name" #设置全局用户名
git config --global user.email "email@example.com" #设置全局邮箱
三、 Git使用
1、 创建本地仓库
初始化所在目录为本地Git仓库,该目录可以不为空(建议使用空目录)。
git init
2、 添加文件到本地仓库(仓库即版本库)
git add file [file1 file2 ...] # 添加文件file到暂存区stage
git add -f file [file1 file2 ...] # 强制添加file到stage(可用于添加忽略文件)
git commit -m "操作说明" # 把stage中的内容提交到仓库
可以多次add,一次commit,此时所有的add的说明是一样的。
可以一次add,一次commit,此时每个add都有自己的说明。
3、 时光穿梭机
- 查看状态
git status # 查看仓库当前状态
- 查看差异
git diff [file] # 查看工作区和暂存区中[file]的差异
git diff --cached [file] # 查看暂存区和仓库中[file文件]的差异
git diff HEAD -- [file] # 查看工作区和仓库中[file]的差异
- 查看历史
git log # 查看commit历史信息
git log -1 # 查看最后一次commit信息
git log --pretty=oneline # 单行模式显示
--graph # 用图形显示分支合并历史
--abbrev-commit # 简写commit_id
git reflog # 查看所有操作记录,包括回退,删除
- 版本切换
git reset --hard HEAD^ # 回到上一版本
git reset --hard HEAD^^ # 回到上上版本
git reset --hard commit_id # 切换到commit_id(可以是简写的)指定的版本。
- 撤销修改
git checkout -- [file] # 撤销对工作区的修改(没有执行add时)
git reset HEAD [file] # 撤销对暂存区的修改(执行add,但没执行commit时)
执行了commit,可以先使用上一步的版本回退。
删除文件
shell命令删除工作区文件,然后提交
rm file
git add file
git commit -m "说明"
git命令删除工作区和暂存区文件,然后提交
git rm file
git commit -m "说明"
4、 远程仓库
- 在本地创建SSH Key
ssh-keygen -t rsa -C "youremail@yourdomain.com"
Linux下默认生成的 id_rsa 和 id_ras.pub 文件在 ~/.ssh/ 目录下。
把 id_ras.pub 文件中的内容复制到,并添加到远程仓库(Git服务器)中,进行用户注册。
- 添加远程仓库
git remote add origin git@git-server-name:path/repo-name.git # 添加远程库
git remote # 查看远程库
git remote -v # 显示远程库详细信息
git remote add 的origin,是给远程仓库起的名字,可任写。
- 推送并关联远程库
git push -u origin master # 把本地仓库的分支推送并关联到远程仓库
其中,origin是添加远程仓库时指定的名字,与git remote add时一致。
master是分支名称,master是主分支。
* 除第一次关联外,之后push不需要 -u 选项 *
* 添加远程仓库后,第一次执行clone或者push时有报警信息,是提醒添加了一条对SSH信任的信息,请你确认是否有误 *
- 从远处仓库克隆
git clone git@git-server-name:your-path/repo-name.git ## 克隆远程仓库到本地当前目录
git pull # 拉取远程库内容到当前git仓库目录
5、 分支管理
git branch branch-name ## 创建分支branch-name
git checkout branch-name ## 切换到分支branch-name
git checkout -b branch-name ## 创建并切换到branch-name
git branch ## 查看所有分支
git branch -d branch-name ## 删除分支branch-name
git branch --set-upstream branch-local branch-remote ##关联本地branch-local到远程仓库branch-remote
git merge branch-name ## 合并分支branch-name
git merge branch-name --no-ff ## 禁用Fast-forward快速合并
git merge --no-ff -m "说明" branch-name ## 合并分支并添加说明
git stash ## 保存当前工作现场
git stash list ## 查看保存的列表
git stash apply ## 恢复stash中保存的工作现场
git stash pop ## 恢复并删除stash
git stash drop ## 删除stash
git branch -D branch-name ## 强制删除分支(用于删除未合并的分支)
git merge 使用–no-ff 选项,删除分支后,可以记录分支合并的历史。
分支管理策略
如上图,
① 一般主分支master用来发布版本,保证master分支非常稳定。
② dev分支用来进行开发,不断迭代,保证可以编译通过。
③ 每个人都有自己的分支,用来保存自己工作,保证自己代码不丢失,同时也保证了dev分支能正常编译,不影响其他开发者工作。Bug分支
先保存自己的工作区现场,然后从需要修复bug的分支(如master)建立一个自己的分支,进行bug修改,修改完后合并到master,最后恢复自己的工作区,继续工作。
Feture分支
与Bug分支类似。添加新功能时,新建分支,完成新功能的添加。
多人协作
先从dev分支上pull拉取最新代码,有冲突先解决冲突,最后再合并push到远程仓库。
6、 标签管理
打标签,可以记录每次发布版本对应的代码的位置。
git tag ## 查看现有标签
git tag v1.0 ## 给当前分支最新commit打标签
git tag v0.9 commit_id ## 给指定的commit_id打标签
git tag -a v0.1 -m "标签说明" commit_id ## 给标签添加说明
git tag -s v0.1 -m "标签说明" commit_id ## 用gpg私钥给标签签名
git tag -d v0.1 ## 删除标签v1.0
git show v0.2 ## 显示标签v0.2的信息
git push origin v1.0 ## 推送标签v1.0到远程仓库origin
git push origin --tags ## 推送所有未推送的标签到远程库origin
git push origin :refs/tags/v1.0 ## 删除远程仓库中的标签v1.0(先删除本地,再使用该命令删除)
7、 使用GitHub
GitHub开源协作社区, 世界级公用Git服务器。
- fork 已有项目,生成自己的分支;
- clone 在本地clone自己分支上的代码,进行修改;
- pull request,修改完后commit,push到自己的分支,然后pull request 到源项目中,等待源项目作者合并到项目或者关闭。如果原作者是自己,则自己决定是否合并。
8、 自定义Git
- 设置配置参数
git config --list ## 查看git全局配置参数
git config --global user.name "you_name" #设置全局用户名
git config --global user.email "email@example.com" #设置全局邮箱
git config --global color.ui true #设置全局颜色显示
git config --global alias.<alias_name> <'command_name'> #设置别名
- 忽略特殊文件
在当前Git工作区目录创建 .gitignore 文件,
内容举例,如下:
#Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
#Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
#My configurations:
db.ini
deploy_key_rsa
有文件file不能add,被Git服务器忽略时,查看忽略该文件的规则:
git check-ignore -v <file> #查看忽略该文件的规则
可以使用 git add -f 选项进行强制添加。
- 配置别名列表
git config --global alias.confg 'config --global'
git confg alias.st status
git confg alias.co checkout
git confg alias.ci commit
git confg alias.br branch
git confg alias.unstage 'reset HEAD'
git confg alias.last 'log -1'
git confg alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %
- 搭建Git服务器
搭建教程:搭建Git服务器
Completed!
请开始你的表演!!~~