前言
在团队开发中,难免要合并代码,代码冲突,检查代码之类的,而选择一个版本维护工具是首选项,这会影响以后在代码上的把控,而我使用过svn与git,然后在体验上发现git在这方面是做的最好的,它强大的分支功能和离线状态可使用,让后期工作效率更高,在代码上更方便,而svn在这方面就很吃力,代码的合并与检查都需要人为的操作,如需要代码清单,代码比对工具等人为的检查合并代码,真心浪费时间。
协同流程
不同公司,协同的方式有可能不一样。
而我们的流程是:
- 首先fork远程源的仓库到自己的远程仓库
使用git clone 把项目克隆到自己的本地
1
git clone 远程仓库地址
修改项目代码后检查状态,添加本地,提交本地
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推到自己的远程仓库后向fork源提出合并请求
1
2
3点击
pull request
合并请求填写请求描述当项目已经存在,每次提交需要拉取一份远程源地址代码然后diff比较不同,查看是否冲突,然后合并到本地代码,再进行提交,推送
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18git 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 进行代码贡献拉取团队代码操作流程:
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查看不同点,然后进行调整。
流程图
1 | st=>start: 开始 |