Git操作总结
2017-04-17 git免费,开源的分布式版本控制系统。
配置个人信息
- 配置用户名:
$ git config --global user.name "whoisnian" - 配置邮箱:
$ git config --global user.email "zhuchangbao1998@gmail.com"
连接GitHub
- GitHub同时支持SSH和Https协议:
- Https:任何人都可以clone,push的时候每次都需要验证用户名和密码。
- SSH:只有拥有者可以clone,需要提前在GitHub上添加自己的SSH公钥。
- 查看
~/.ssh下是否存在SSH Key,若存在id_rsa和id_rsa.pub文件,则不需要创建SSH Key;
否则需要创建SSH Key:
$ ssh-keygen -t rsa -C "zhuchangbao2017@gmail.com"
如果没有特殊需要,可以不设置SSH Key密码,一路回车即可。
然后登录GitHub,复制自己~/.ssh下id_rsa.pub中的内容,在个人设置中添加SSH Key。
工作区—暂存区—仓库
- 工作区:
本地的自己直接在里面对文件进行修改的文件夹就叫做工作区,工作区下的.git目录则是版本库,记录着版本数据。 - 暂存区:
当使用git add命令时,git会把工作区的改动保存到暂存区,此时改动尚未提交到仓库。 - 仓库:
当使用git commit命令时,git才会把已经保存在暂存区的改动上传进本地仓库,此时自己在本地所做的修改才算完成。
撤销修改
- 撤销工作区对
README.md的修改:
$ git checkout -- README.md
这样就可以将工作区的README.md恢复到修改前的样子,也就是最近一次git add或者git commit之后的样子。 - 撤销暂存区对
README.md的修改:
$ git reset HEAD readme.txt
这样就可以把暂存区的README.md恢复到和本地仓库相同的状态,其中HEAD指的就是本地仓库中最新的版本。
版本控制
- 查看版本记录:
$ git log
或者简化输出内容:
$ git log --pretty=oneline --abbrev-commit
里面的一长串十六进制数字就是版本号,即commit id。 - 找到了想要回退到的版本的
commit id,现在就可以进行版本回退了。上一个版本就用HEAD^表示,上上个版本就是HEAD^^,再多的话,比如前第100个版本,可以用HEAD~100表示。
返回上个版本:
$ git reset --hard HEAD^ - 返回上个版本后,再执行
git log就会发现回退之前的版本号不见了。
此时如果想要回到最新的版本,可以查看git的历史记录:
$ git reflog
找到回退之前的commit id之后就可以回退了。
分支管理
- 创建新分支
dev:
$ git branch dev - 切换到
dev分支:
$ git checkout dev - 查看当前分支:
$ git branch - 查看所有分支:
$ git branch -a - 创建与远程仓库
dev分支相同的本地分支:
git checkout -b dev remotes/origin/dev - 把
dev分支合并到master分支:
$ git merge dev - 删除本地仓库的
dev分支:
$ git branch -d dev - 删除远程仓库的
dev分支:
$ git push origin --delete dev - 强制删除未合并的分支:
$ git branch -D dev - 查看分支合并图:
$ git log --graph
或者简化输出内容:
$ git log --graph --pretty=oneline --abbrev-commit
在实际开发中,master分支应该是非常稳定的,也就是仅用来发布新版本,平时的修改都在dev分支上,dev分支是不稳定的。每个人都有自己的分支,时不时地从自己分支往dev分支上合并。当修改已经确定时,再把dev分支合并到master上,然后在master分支上发布新版本。
标签管理
- 切换到想要加标签的分支
dev:
$ git checkout dev - 给分支加标签:
$ git tag v1.0
或者得到commit id为6666666后,直接对该次commit加标签:
$ git tag v1.0 6666666 - 查看所有标签:
$ git tag - 删除标签:
$ git tag -d v1.0
多人协作
- 大致流程:
- 开发者
Fork上游仓库到自己的GitHub。 - 开发者在自己
Fork得到的仓库中创建一个测试分支,并在上面进行修改。 - 开发者通过Github向上游仓库发起一个
pull request。 - 上游仓库成员审核代码,并作出修改。
- 开发者的代码被并入上游仓库,然后该
pull request被关闭。
- 开发者
- 克隆
Fork得到的仓库到本地:
$ git clone git@github.com:user/repo.git - 创建
dev分支:
$ git checkout -b dev - 在
dev分支上修改完毕后git commit,然后推送到自己的仓库:
$ git push origin dev - 然后到上游仓库中,选择
New pull request。
base fork选择上游仓库的地址,base选择要提交到的上游仓库的分支;
head fork选择自己仓库的地址,compare选择自己仓库的分支,例如上面的dev分支。
最后选择Create pull request,并对自己的pull request进行详细说明。 - 现在就等待上游仓库成员的回复吧。
如果上游仓库在自己
Fork之后有了新的修改,而你又想要让自己Fork得到的仓库与上游仓库保持一致的话,可以使用下列命令:
$ git remote add upstream https://github.com/original_owner/original_repo.git添加上游仓库地址(注意修改为你的上游仓库实际地址)。$ git pull upstream master同步上游仓库到本地仓库当前分支。- 然后再
git push到自己GitHub上的仓库即可。
常用命令
- 克隆仓库:
$ git clone - 初始化仓库:
$ git init - 本地仓库连接远程仓库:
$ git remote add - 添加文件改动到暂存区:
$ git add - 添加所有改动到暂存区:
$ git add -A - 移动暂存区文件:
$ git mv - 删除暂存区文件:
$ git rm - 查看工作区和暂存区状态:
$ git status - 查看修改内容:
$ git diff - 提交暂存区到本地仓库:
$ git commit - 从远程仓库同步到本地仓库:
$ git pull - 推送本地仓库到远程仓库:
$ git push