1. git 基础概念

  • workspace / working directory:工作区
    就是你在电脑里能看到的目录
  • index / stage:暂存区
    更改通过git add到了这里
  • repository:版本库
    git commit更改到这里
  • remote

gitlab代码扫描开启 gitlab codereview工具_远程分支

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
冲突有两种

  1. 两个人更改了同个文件的同一行
  2. 两个人一个人对文件做了更改,另一个人删掉了文件

如果我需要从origin/master 开始开发,本地的更改暂且不动,如何操作?

  1. 从服务器上获取数据
    git fetch origin
  2. 在远程分支的基础上分化出来一个新分支(如serverfix)
    git checkout -b serverfix origin/master
  3. 在serverfix上继续开发

4. 你会用到的:

  1. 撤销修改
  2. Git-为项目作贡献
  3. Git 分支 - 远程分支
  4. git ssh 如何用: 先在本地产生ssh key:ssh-keygen -t rsa -b 4096 -C “your_email@example.com”;然后在gitlab上profile settings里add key
  5. 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 试下