首页 > 服务器 > GIT 操作详细步骤
2016
11-24

GIT 操作详细步骤

1. clone代码

命令: git clone git:mt8735_m0_v1.0.3

说明: 克隆下来的代码, 默认为master分支,远程分支为remote/origin/master。

HEAD指向当前所在的分支(master)。

remote/origin/master中,origin为默认的远程机器名,master为远程分支名称。

图示:

注:在包含“.git”的目录中,执行以下命令

scp git:hooks/commit-msg .git/hooks/

2. 建立bug分支(比如mantis100用于修改mantis上的bug#100)

命令: git checkout -b mantis100

说明:命令执行完成后, 会自动创建并切换至mantis100分支,因此HEAD会指向此分支(mantis100)。

图示:

3. 修改bug#100并在mantis100分支上进行提交

命令: git add, git commit

说明:在修改bug#100的过程中,服务器上会有新的提交(S4,S5)。

mantis100分支指针会随着提交而移动,始终指当前分支的最后一次提交(L1,L2)

由于没有直接在master分支提交,master指针不变。

remote/origin/master指针在(通过fetch, pull等同步命令)与服务器同步前始终不变。

图示:

4. 使用fetch指令获取服务器上的更新

命令: git fetch origin

说明:fetch只会把服务器上的更新拉取到本地,不会与本地的master分支进行合并。

remote/origin/master会始终指向获取到的最后一个远程修改。

图示:

5. 切换至master分支

命令: git checkout master

说明:其实就是HEAD指针指向master, mantis100和master指针均不变

图示:

6. 使用rebase命令更新master分支

命令: git rebase origin/master

说明:目的是使master分支与remote/origin/master分支保持一致, 为后面的cherry-pick做准备

由于master分支上没有在本地提交过修改,因此这个指令不会导致合并动作, 仅将master分支的指针移动至remote/origin/master所指向的节点。

图示:

7. 使用cherry-pick命令追加mantis100分支上的修改

命令: git cherry-pick L1,git cherry-pick L2

说明:有选择性地将L1或L2追加到master分支的末尾,这部分被追加的修改将会被推送到服务器。

图示:

8. 删除mantis100分支

命令: git branch -d mantis100

说明:此时mantis100上的修改已经追加到master分支上准备push了,因此mantis100分支已经完成了它的历史使命,可以删除了。

不建议继续在这个分支上进行开发, 否则会导致分支间的关联过于复杂而产生各种依赖问题。

图示:

9. 使用push命令推送修改至review服务器

命令: git push origin HEAD:refs/for/master

说明:master分支上,在remote/origin/master之后的修改将被推送至代码审核服务器

注意:各个修改的change-id不能相同,否则会出错。

注: 第5步至第7步也可以通过直接在mantis100分支上使用rebase指令来实现。基本思路为:

当remote/origin/master已经通过fetch命令更新了以后,在mantis100分支上:

1. 直接将mantis100分支的修改rebase到remote/origin/master,git rebase origin/master

2. 如果rebase过程中产生冲突,需要手动解决冲突并add修改后文件,再执行rebase –continue

3. 切换回master,并将master分支直接rebase到mantis100分支

4. 删除mantis100分支。

 

来自:http://www.jianshu.com/p/60fac8b97465

 

编程技巧