git提交流程

git提交流程

基础Git环境配置

git clone ssh://git@gitlab.xxx.com:10022/<your_username>/MyProject.git
**clone之后,个人仓库的url会自动记为origin**
  • 添加中央仓库的远程地址。
#关联指定url的远程仓库(这里就是中央仓库),名字记做upstream
git remote add upstream ssh://git@gitlab.xxx.com:10022/someUser/MyProject.git

由于上一步中自动将个人仓库记做了origin,所以此处就无需 git remote add origin

开发前准备(每次开发新的需求从此处开始)

  • 从中央仓库拉取最新代码。
#从upstream仓库的branch-1.1.x分支拉取代码到本地的当前分支上,upstream就是之前配置的中央仓库的代号
git pull upstream branch-1.1.x

若拉取的代码与本地发生了冲突,可以使用git stashgit pullgit stash pop stash@{0} 然后手动处理冲突后,进行接下来的创建开发分支

  • 创建开发分支
git checkout -b MyProject-XXX # XXX代表redmine中的问题编号

正式开发及提交

每个需求开发过程中不要频繁commit,只需在最后commit, 并标注问题编号和一段注释
注意push至origin(个人仓库)而非upstream(中央仓库)

git add -A #将工作区发生的所有变动(文件修改、新增、删除)添加到暂存区
git commit -m "[MyProject-XXX] <some comments>" #将暂存区提交到本地仓库
#将本地MyProject-XXX的分支提交到名为origin的远程仓库的MyProject-XXX分支,若远程不存在改分支则创建
git push origin MyProject-XXX:MyProject-XXX

Merge流程

  • 提交merge请求(在网页上完成)
    如果代码review时发现问题需要修改,修改后可以通过如下方法进行提交:
git commit --amend --no-edit # 不修改commit message
git push origin MyProject-XXX:MyProject-XXX --force

这样,您的最新修改将能够自动显示在Gitlab的页面上。

  • merge成功之后,在本地切换回最初的分支,然后删除为了当前需求创建的分支:
git checkout branch-1.1.x
git branch -d MyProject-XXX

补充

fetch+merge=pull

比如本地master分支开发后commit,待push前需要从origin/master拉取新的改动。

  1. 使用fetch+merge:
    git fetch会将origin/master 分支的拉取到本地保存起来,并不会影响本地master分支。
    然后我们可以通过 git log、git diff 查看改动情况。
    然后使用git merge origin/master 合并到当前分支。如果出现冲突,需要手动处理冲突后git add、git commit
    最后 git push
  2. git pull= fetch+merge:
    略过了fetch之后可以查看变化的步骤,直接到手动处理冲突阶段。

git rebase

http://gitbook.liuhui998.com/4_2.html
假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b mywork origin

在这里插入图片描述
现在我们在这个分支做一些修改,然后生成两个提交(commit).

$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit

但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。

在这里插入图片描述
在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

在这里插入图片描述
但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

$ git checkout mywork
$ git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 到最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。
在这里插入图片描述

当’mywork’分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

在这里插入图片描述
现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:

在这里插入图片描述
在这里插入图片描述在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用–abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。

$ git rebase --abort
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值