随着项目人员的增加,需要多人协作开发,源仓库默认有个master分支,我们需要再次创建一个develop开发分支,一般源仓库是受保护的,开发者不应该直接对其进行开发工作。master主要有两个作用:
- 汇总参与该项目的各个开发者的代码;
- 存放趋于稳定和可发布的代码。
有两种方式实现多人协作:
- 第一种方式,在源仓库下开一个分支develop,大家有更新直接提交到develop中,如果该版本比如V1.0.0完成,就可以合并到master上就好。其中,每个人是从develop下切新的分支,比如dscdev,dscdev开发一个小feature之后,也可以通过merge requests的方式向develop提pr,同时也可以邀请组内成员review代码。leader阅读完之后没问题,就可以merge到develop分支中。
- 第二种方式是每个成员都需要fork源仓库中的一份代码到自己的远程库之中。
此处假设源仓库地址为git@github.com:flutter/flutter.git,我的远程仓库地址为:git@github.com:duanshoucheng/flutter.git。在Android Studio下clone我的远程仓库到本地,然后:
- git remote add upstream git@github.com:flutter/flutter.git
upstream可以自己命名。此时可以使用命令:
1)git remote -v
可以查看所有的远程仓库
2)git remote show [remote-name]
相比上一个命令,可以查看某个远程仓库更详细内容,包括仓库下有哪些分支 - git fetch [remote-name] // git remote update upstream
更新远程仓库所有的数据,包括所有的分支,所以远程仓库崩溃了,可以使用 当前本地仓库重建远程仓库。
merge的时候,可以选择某一个分支来合并到当前分支,当然本地的分支一定要提前设置好跟踪远端仓库的分支。 - git checkout -b [分支名] [远程名]/[分支名]
为本地分支设定不同于远程分支的名字。[远程名]/[分支名]表示远程分支
例如:git checkout -b develop origin/masterdevelop
现在本地分支 develop会自动将推送和抓取数据的位置定位到origin/masterdevelop
解释几个额外的命令:
1. git fetch remote_repo remote_branch_name:local_branch_name
这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,
并在本地创建local_branch_name 本地分支保存远端分支的所有数据。
2. git branch –set-upstream-to=origin/remote_branch your_branch
origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。
3. git remote add origin git@github.com:flutter/flutter.git
git remote add (remote) (repoUrl)用于不相关的两个库
本地仓库关联远程仓库(一般是被fork的仓库,也是源仓库)。
添加后,远程仓库的名称就叫origin
以下是之后常用的工作流程
- git add .
- git commit -m “xxx”
- git checkout develop
- git pull -r
- git checkout dsc/develop
git rebase develop
可能有冲突,命令git status会提示。此时可以git diff — cached xx/xx/xx/xx.java查看冲突的详情,
然后git add xx/xxx/xx/xx.java,或者git add .
status查看,会有提示下一步的操作过程,最后 git rebase —continue.
然后(重要)切换到dsc/develop分支下
git push -f origin
建议在后面添加 dsc/develop:dsc/develop,冒号前面代表本地仓库,冒号后面代表远端仓库。如果不添加后面的,可能会报错:the current branch dsc/develop has no upstream branch
可以在网页中提PR了。
注:建议开始工作时多执行:git status查看当前情况。首次使用的顺序:
1)我的fork仓库:develop //此步在网页中操作
2)我的开发分支:dsc/develop (本地分支一般和远程分支都有对应关系)
新建分支的命令:git checkout -b dsc/develop ,创建了一个名为dsc/develop的分支
删除分支的命令:git branch -D dsc/develop ,删除了一个名为dsc/develop的分支
本地分支如果同步了远程分支,那么继续删除远程分支的命令:git push origin --delete dsc/develop(需要删除的分支名)
可能会出现的问题:
1、已经push远端,怎么回退
git reset –soft HEAD~1 //~1代表回退上一个版本.
HEAD已经指向上一个commits了,我们可以是用git reflog验证下。
继续使用git status就可以发现已经处于commit状态了。
其他用法:
1、查看分叉历史命令:
git log –oneline –decorate –graph –all
2、stash的使用
出现的场景:有时候在一个分支下开发到一半,想切换别的分支,但又不想提交已修改的。
解决方法:使用命令:git stash 可以存储修改的,内容,git stash list就可以查看所有的存储列表。
如果想使用存储的修改,可以使用git stash apply命令。这个命令是最近的一次存储,如果有很多存储,可以使用命令git stash apply stash@{2} 里面的数字取决于你需要恢复的版本。
删除的命令:git stash drop stash@{0} 括号里的数字为需要删除的版本
参考:
1。 开源中国的教程