目录

以前的做法

使用fork和git rebase

fork

git rebase

提交mr(Merge Request)


昨天第一次使用fork和git rebase,记录下。。。

以前的做法

以前习惯做法都是clone公司原有项目到本地,然后自己checkout一个新的分支(如dev)进行开发,开发测试完成后,会有组长负责去merge我的dev分支到master。

当然在这个需求的开发期间可能有无数次的git commit和git push。

使用git log可以看到自己在做这个需求期间提交了n次。。。

使用fork和git rebase

fork

选择需要fork的项目,点击【fork】,大约1分钟左右的时间,等fork完了以后就会看到自己名下已经有了该项目

gitlab refs修饰词 gitlab的fork_github

 

gitlab refs修饰词 gitlab的fork_github_02

然后就是常规操作了,clone自己名下的项目到本地,默认是master分支,然后自己根据当前需求checkout一个新的分支进行需求开发

git clone http://git.xxx.cn/xxx.xie/goutil.git

// 例如:新开一个alert分支,进行告警相关功能开发
git checkout -b alert

然后就在alert分支开发---测试---提交

// add修改过的文件
git add main.go 
// 提交修改的msg
git commit -am "xxx" 
// 列出远程项目url
git remote -v
// 设置当前分支的上游
git remote add upstream http://git.xxx.cn/xxx.xie/ops.git
// 提交alert分支的修改
git push origin lert

如果已经设置过upstream,想要修改之前的upstream

git remote set-url upstream http://git.xxx.cn/rd/txxe.git

 

git rebase

合并之前的多次提交。


// 我目前在alert分支,设置master作为rebase。这里还可以设置需要合并前多少次的提交
// git rebase -i master~1 ,表示合并前2次的提交
// -i 代表进入交互模式

// 第一步:
git rebase -i master

// 第二步
// 进入交互模式后,会出现最近几次的pick,把pick修改为s
// 参考https://www.codercto.com/a/45325.html
// 

// 第三步:
wq 保存后退出

// 第四步:
修改 需要提交的msg

// 第五步:
wq 保存退出

最后出现类似的信息,说明rebase成功。
Successfully rebased and updated refs/heads/alert.

提交mr(Merge Request)

在gitlab下找到需要提交mr的项目的分支(我的alert分支),

gitlab refs修饰词 gitlab的fork_代码库_03

选择对应的项目和分支

gitlab refs修饰词 gitlab的fork_代码库_04

然后就是等待你的mr被处理,处理完了以后就merge到自己名下的master分支。 

首先clone fork出来的仓库到本地

git clone git@github.com:123/456.git

在 fork 的代码库中添加上游代码库的 remote 源

git remote add upstream git@github.com:789/456.git

获取原始仓库分支和对应的提交

git fetch upstream

在本地实现与upstream的同步

git rebase upstream/master
成功的话提示如下:
$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
Fast-forwarded master to upstream/master.


推送自己的本地仓库到自己的远程仓库

git push