1. git 基础概念
- workspace / working directory:工作区
就是你在电脑里能看到的目录 - index / stage:暂存区
更改通过git add到了这里 - repository:版本库
git commit更改到这里 - remote
branch
2. 常用的 git 命令
本地
git add / rm -<file / directory>
git commit -m "xxxx"
远程
git push origin <远程分支>:<本地分支>
分支
git branch dev
:
创建分支dev git branch -d dev
:
删除分支dev git checkout dev
:
切换到dev分支 git checkout -b dev <分支>
:
创建一个叫dev的新分支,并切换到dev,又等同于
git branch dev
git checkout dev
后面的<分支>是指 以哪个分支为base, 通常设为origin/master
3. code review
利用分支
- 从origin/master分支分出来一个dev分支:
git checkout -b dev origin/master
- 在dev分支上进行一些更改
- add到本地stage
git add/rm <file / directory>
- commit到本地repository
git commit -m "<notes>"
- push到远程分支
git push origin <远程分支>:<本地分支>
- 在网页中提一个merge request, 估计从dev 到 master
理解git merge 和 git rebase
一般merge分支到远程master的流程
- 切换到本地master
git checkout master
- 把远程库pull到本地的workspace
git pull origin master
- 把chi-dev分支merge到本地master
git merge chi-dev
- 此时如有冲突, 解决冲突( 可以看 分支与合并基础 ):
执行 git status 会显示这些文件没有合并(unmerged),这些有冲突的文件里面会添加像下面的冲突标识符:
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
所要做的就是编辑解决冲突(删掉冲突标识符, 改对代码), 等号和7个<之间是HEAD, 等号和7个>之间是 77976da35a11db4580b80ae27e8d65caf5208086
- 把刚做的这些编辑提交到index
git add
- 把这些编辑提交到repository
git commit
- 提交到远程版本库
git push
解决冲突
这个讲的很好:
Resolving a merge conflict from the command line
冲突有两种
- 两个人更改了同个文件的同一行
- 两个人一个人对文件做了更改,另一个人删掉了文件
如果我需要从origin/master 开始开发,本地的更改暂且不动,如何操作?
- 从服务器上获取数据
git fetch origin
- 在远程分支的基础上分化出来一个新分支(如serverfix)
git checkout -b serverfix origin/master
- 在serverfix上继续开发
4. 你会用到的:
- 撤销修改
- Git-为项目作贡献
- Git 分支 - 远程分支
- git ssh 如何用: 先在本地产生ssh key:ssh-keygen -t rsa -b 4096 -C “your_email@example.com”;然后在gitlab上profile settings里add key
- git ssh 用两个不同的host:1. ssh-keygen -t rsa -C “xx@email.com” 2. ssh-add 3. 到bitbucket上添加public key 4. 在~/.ssh/config 添加配置 5. git clone git@bitbucket.org/xxx 试下