前言

在团队开发中,难免要合并代码,代码冲突,检查代码之类的,而选择一个版本维护工具是首选项,这会影响以后在代码上的把控,而我使用过svn与git,然后在体验上发现git在这方面是做的最好的,它强大的分支功能和离线状态可使用,让后期工作效率更高,在代码上更方便,而svn在这方面就很吃力,代码的合并与检查都需要人为的操作,如需要代码清单,代码比对工具等人为的检查合并代码,真心浪费时间。

协同流程

不同公司,协同的方式有可能不一样。
而我们的流程是:

  1. 首先fork远程源的仓库到自己的远程仓库
  2. 使用git clone 把项目克隆到自己的本地

    1
    git clone 远程仓库地址
  3. 修改项目代码后检查状态,添加本地,提交本地

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 直接从主分支提交到远程的主分支上

    git status // 查状态
    git add . // 添加所以修改

    git add 修改文件 // 可文件夹,多个文件用空格隔开
    git commit -m "修改信息" // 提交到本地仓库
    git remote -v // 检查关联的远程仓库,找到提交的远程仓库名称
    git push <远程主机名> <本地分支名>:<远程分支名> // 提交到远程仓库
    如: 关联的远程仓库有: myDemo、gs
    git push myDemo master
    本地的主分支推送到myDemo远程仓库里

    // 从创建分支提交到远程的创建分支,然后请求合并,最后合并到主分支master上

    git checkout -b fz // fz为分支名,这是创建分支并切换到创建分支上
    git status // 查看状态
    git diff 文件 // 根据状态查看文件,然后比较是否为需要提交的代码
    git add 文件... // 根据状态查看文件,添加文件到暂缓区
    git commit -m "描述" // 提交暂缓区到当前分支的本地仓库上
    git branch // 查看所有分支,并确认分支名
    git push <远程主机名> <本地分支名>:<远程分支名> // 提交到远程仓库
    // 到远程仓库中提出合并请求
    git checkout master // 切换到主分支
    git merge fz // 合并分支到主分支
    git push <远程主机名> master // 把合并修改提交远程仓库的主分支上,为了同步,因为自己仓库需要自己维护,所以本地合并后提交到远程master
  4. 推到自己的远程仓库后向fork源提出合并请求

    1
    2
    3
    点击
    pull request
    合并请求填写请求描述
  5. 当项目已经存在,每次提交需要拉取一份远程源地址代码然后diff比较不同,查看是否冲突,然后合并到本地代码,再进行提交,推送

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    git remote add 代码源地址名称taregt 代码源地址 // 添加远程仓库关联
    git fetch git fetch taregt master:temp // 从远程的taregt仓库的master分支下载到本地并新建一个分支temp
    git diff temp // 比较本地的仓库和远程仓库的拉取到本地分支对比
    git merge temp // 合并temp分支到master分支
    git branch -d temp // 删除temp分支

    // 快速拉取,拉取是会自动合并,但有冲突就会提示,然后等冲突解决后合并,如使用git stash储藏可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用
    git pull <远程主机名> <本地分支名>:<远程分支名>

    // 回退版本,reset回退只是指针的回退到指定版本,然后重这个版本开始
    git reset --hard 目标版本号或HEAD^上一个版本

    // revert的作用通过反做创建一个新的版本,是把回退的版本做成一个新的版本,可以保留该目标版本后面的版本
    git revert -n 版本号

    // 都可以使用git log 查看版本信息

    // 重新操作、添加、提交、推送、pull request 进行代码贡献
  6. 拉取团队代码操作流程:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // 在项目拉取团队开发的代码时,一般有两种保存自己代码方式,为了的是不给拉取代码覆盖

    // 1. 创建分支,把代码从分支提交到本地分支里,等拉取完后,看情况merge合并分支代码到master里,这样就不会覆盖自己开发的代码,当然在merge时可以使用diff指令查看不同的地方,是否需要调整的
    git checkout -b 分支名
    git add .
    git commit -m "描述"
    git checkout master
    git pull 远程主机 master
    git diff 分支名
    git merge 分支名

    // 2. stash到储存起来,把修改的代码存起来,然后拉取代码
    git stash
    git pull 远程主机 master
    git stash show -p // 查看拉取代码与存起来的代码的不同地方
    git stash apply // 应用储存的代码,这样就可以实现不被拉取代码覆盖

使用例子2觉得比较好,因为不会在log里存在提交日志,而且也不要创建分支合并分支删除分支等操作,就简单的存起来,然后释放就可以了,其实就就是把修改的代码保存起来,然后工作区的代码还原为当前版本的代码,拉取远程仓库代码带当前版本的代码里,最后应用存起来的代码就是覆盖到当前拉取的代码,就是一个这样的操作,所以有必要git stash show -p查看不同点,然后进行调整。

stash资料

更多git的学习


流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
st=>start: 开始
op1=>operation: fork源项目
op2=>operation: add添加本地
op3=>operation: commit提交本地
opt4=>operation: 推送自己远程仓库
opt5=>operation: pull request
opt6=>operation: remote add 添加远程源仓库
opt7=>operation: clone克隆到本地
opt8=>operation: fetch拉取到本地仓库的新分支
opt9=>operation: diff比较主与支代码
opt10=>operation: 合并代码,删除分支
cond=>condition: 是否为初创项目?
e=>end: 结束
st->cond
cond(yes)->op1->opt7->opt6->op2->op3->opt4->opt5->e
cond(no)->opt8->opt9->opt10->op2