git简明实操模板

已经merge到主分支的开发分支就不要再继续用了,删掉就行,如果继续用那么开发分支的新提交就只能通过cherry-pick指令向主分支提交代码以最大限度的减少冲突,继续使用merge就会出现大量的冲突,而且用继续用这个开发分支是没有任何意义的,因为开发分支里的所有代码改动都已经在主分支里了,直接从主分支里面再checkout -b一个新分支就好了,为什么还要继续使用一个本应该被删掉的分支呢?

代码版本管理的情景。

项目远程仓库中有两个分支:

1】maseter分支作为发布分支,只接受要release到客户手中的代码,需要保证任何时候都能编译通过

2】dev分支作为开发分支,接受所有开发过程中的代码,需要保证任何时候都可以编译通过

你自己在本地以dev分支为base进行开发,测试通过后merge进入master分支。在版本管理的时候你要面对的几个主要问题:

1】保证自己的本地分支跟远程分支同步

2】保证自己的commit跟分支整洁

3】合并代码时候尽量少的冲突

4】自己的代码合并进远程仓库后不会引起问题

下面从仓库的建立开始,逐步进行介绍:

1】创建仓库

git clone 远程仓库地址

2】切换到开发分支

git checkout dev

git pull        # git pull 是定期的操作,需要时长进行,这是减少冲突的保证

3】以开发分支为base,创建自己的开发分支

git checkout -b myDev

4】在自己的开发分支中进行开发,提交自己的commit

git add -u
git commit -m "commit1"

git add -u
git commit -m "commit2"

git add -u
git commit -m "commit3"

git add -u
git commit -m "commit4"

5】现在碰到一个场景,你的当前task还没有开发完,但是你的代码已经有一段时间没有同远程dev分支进行同步了,这让你很忐忑,你可以通过如下操作进行同步

git checkout dev       # 切换到本地的dev分支
git pull               # dev 分支同远程dev分支进行同步

git checkout myDev     # 切换回自己的分支
git rebase dev         # 让自己的myDev分支同远程的dev分支进行同步,并保证自己的commit1、commit2、commit3、commit4处于所有commit记录中的最新位置,这个过程中可能会出现冲突,需要及时解决,如果过这个同步过程进行的比较频繁(如每隔一两天进行一次)及时的话,很少会出现冲突,就算有冲突也是很小的冲突很容易解决

6】在myDev分支上继续开发

git add -u
git commit -m "commit5"

git add -u
git commit -m "commit6"

git add -u
git commit -m "commit7"

git add -u
git commit -m "commit8"

补充6】如果在开发过程中,你使用多台机器(跨平台开发时候)同时维护myDev分支,也就是说你本台机器上开发的代码需要在开发过程中与其他机器共享(不是与同事共享,是这个分支就你自己在用,但是在多台机器上用),你需要保持远端的myDev分支跟你本地的myDev分支时时保持同步

git checkout dev    #切换到主分支

git pull     # 获取主分支最新代码

git checkout myDev     # 切回自己的开发分支

git pull            # 先把其他机器上提交的代码同步下来

git rebase dev        # 基于最新的dev代码rebase 自己的开发分支

git push --force-with-lease  # 将自己的开发分支myDev同步到远程的开发分支myDev,当缺少后面的命令后缀时候会有冲突报错,只是别人也在使用这个myDev分支的话,会给其他的同事产生非常不好的影响

一个人同时使用多台机器时候工作通常是串行的,完全可以一台机器上推完代码再去另一台机器上pull之后再工作,但是多个人共用一个分支点的时候工作往往是并行的,把远程的myDev分支强制改了就相当于把其他同事的开发base给改了,他要pull你强制推到远端的代码就会失败,所以多个人共用一个开发分支的时候一定不要使用rebase,或者在开发过程中都不要再改动myDev的base,等最后再开发分支都做完了统一由一个同事做rebase的工作,做完rebase之后强制推到远端仓库与远端的主dev分支合并。

7】经过这8个commit你已经完成了task的开发,完成了各种测试,需要将代码提交到远程dev分支中

git checkout dev
git pull
git checkout myDev
git rebase dev        # 将本地代码与远程代码进行最后的同步


git rebase -i # 将本地的8个commit进行合并,以简洁自己的版本管理,具体细节网上有很充足的教程
git push origin myDev:myDev    # 将本地的myDev分支推送到远程仓库的myDev新分支

# 需要注意的是上面虽然将本地的分支推到了远程仓库,但是此时的远程仓库myDev分支跟本地的myDev分支之间并没有跟踪关系,要创建他们之间的跟踪关系还需要 git --set-upstream origin myDev:myDev 指令操作

8】在远程仓库中创建merge request将代码合并进dev分支就可以了。

9】你提交的代码进入了远程的dev仓库之后,经过别人pull测试合格了,可以release了,后面你开始准备将你的开发代码合并进入release分支

10】切换到本地的master分支pick对应的代码

git log --author="你的账号名字"     # 查看你自己的提交记录,获取commitID

git checkout master
git pull

git cherry-pick commitID        # 前面你已经将commitID进行了合并,而且将commitID移到了最新的位置,所以你这里的这一步就会少很多麻烦,如果出现冲突解决冲突,不过前面你如果严格按照这个流程进行开发,这里理论上不会出现冲突

11】本地master分支代码测试通过,提交到远程自己的新分支

git push origin master:master-自定义远程新分支后缀

12】远程仓库中提交merge request 或者是cherry-pick请求,将自己分支中的代码合并到master分支中

13】其他人获取了你在master上的代码,联调测试通过,等待代码release

补充场景:

在6或者4的过程中,你又接收了新的task,这个task可以在你commit3的基础上继续进行,分两种情况:

1】新的task你可以非常快的完成,基本上不会影响你现在的工作进度

git stash         # 将现在工作现场进行保护
git checkout commit3ID -b myDevNew     # 以commit3ID为base创建一个新的开发分支

# 完成开发工作,提交代码

git checkout myDev # 回到原来的开发分支

git stash pop        # 恢复原来的工作现场,继续原来的开发工作

2】新的task是个长期的任务,且优先级比较高,需要停下手头的task,首先完成新的task

git add -u
git commit -m "保存工作现场"

git checkout commit3ID -b myDevNew # 创建新的开发分支

# 完成新task的开发工作,提交代码,流程如上面所本文所讲

git checkout myDev     # 切换回原来的开发分支,继续原task的开发

总结一个流程图

猜你喜欢

转载自blog.csdn.net/ljl86400/article/details/111403339