1、设置全局签名
1)git config --global user.name "张三"
2)git config --global user.email "zhangsan@163.com"
2、在工作空间克隆develop分支到本地
1)git clone -b develop http://gitlab.******.git
3、创建并切换到feature分支,不要push到远程
1)git checkout -b feature-<姓名全拼写>,如:feature-zhangsan
2)git branch -a 查看当前分支,星号应该在对应feature分支上
3)git add <filename> 追踪本地文件到暂存区
4)git commit -m "submit message" <filename> 提交修改文件到本地仓库(本地feature分支)
4、合并本地feature分支到远程仓库develop分支上
1)git checkout develop 先切换到 develop
2)git pull --rebase origin develop 让 develop 保持最新的 HEAD
3)git checkout feature-<姓名全拼> 再切换到 feature
4)git rebase develop 让 feature 的 base 是 develop 的 HEAD
5)git checkout develop 再切换回 develop
6)git merge feature-<姓名全拼> 合并feature
7)git push origin develop 把本地 develop 的内容 push 到远程 develop 分支
5、merge 冲突解决
git ls-files -s,该命令输出的第二列的值如果为0表示对应的文件没有冲突,合并成功,如果不为0,则表示产生了合并的冲突,其中具体的值对应的意义是:
1:表示两个用户之前一个共同版本的对应文件内容;
2:表示当前用户对应的文件版本;
3:表示合并后的文件对应的远程版本
git show :n:filename,通过该命令查看对应文件的对应版本的内容。在知道了三个版本的文件内容之后,我们就可以手动的对冲突的文件进行手动修改操作了。这里需要注意的是,对应的冲突文件的内容已经发生了改变,里面对应的冲突区域的内容将会同时存在当前分支的内容和远程版本的内容。一般都是<<<<符号打头的。我们可以手动对该文件进行修改操作,然后再手动add、commit、push就可以了。
6、合并远程仓库develop的指定commit到本地feature
1)git log查看develop分支的所有commit的HASH
2)git checkout feature 切换到 feature 分支
3)git cherry-pick <HASH> 合并指定的commit
4)git cherry-pick <HashA> <HashB> 将 A 和 B 两个提交应用到当前分支,这会在当前分支生成两个对应的新提交
5)git cherry-pick A..B 可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。提交 A 将不会包含在 Cherry pick 中
6)git cherry-pick A^..B 包含提交 A
7、推送feature分支的指定commit到远程仓库develop
1)git checkout -b temp-submit remotes/origin/develop 基于工作分支develop的最新节点创建并切换到新的分支temp-submit
2)git cherry-pick <HASH> (此时已经在temp-submit分支上了)cherriy-pick commit-hash到temp-submit分支上
3)git log 查看到feature的commit-hash已经在temp-submit分支上了, 并且是最后一个提交
4)git push 接push到工作分支develop-BEABANK就可以了
5)git branch -d temp-submit
如果想要推送某一个特定的提交,需要保证这个提交之前没有其他的提交了,如果不是,我们可以通过git rebase -i改变提交的位置,使其之前没有其他提交
8、合并本地feature分支的多个commit为一个完整commit
当我们在本地仓库中提交了多次,在我们把本地提交push到公共仓库中之前,为了让提交记录更简洁明了,我们希望把多个提交记录合并为一个完整的提交,然后再push到公共仓库,这里我们使用命令:
git rebase -i [startpoint] [endpoint]
其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。将某一段commit粘贴到另一个分支上
将暂存区的提交列出来供我们操作
* pick:保留该commit(缩写:p)
* reword:保留该commit,但我需要修改该commit的注释(缩写:r)
* edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
* squash:将该commit和前一个commit合并(缩写:s)
* fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
* exec:执行shell命令(缩写:x)
* drop:我要丢弃该commit(缩写:d)