GIT 操作详细步骤

appe5476 7年前
   <h2><strong>1. clone代码</strong></h2>    <p>命令: git clone git:mt8735_m0_v1.0.3</p>    <p>说明: 克隆下来的代码, 默认为master分支,远程分支为remote/origin/master。</p>    <p>HEAD指向当前所在的分支(master)。</p>    <p>remote/origin/master中,origin为默认的远程机器名,master为远程分支名称。</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/868e6ea614409eb0578cbb8187904b10.png"></p>    <p>注:在包含“.git”的目录中,执行以下命令</p>    <p>scp git:hooks/commit-msg .git/hooks/</p>    <h2><strong>2. 建立bug分支(比如mantis100用于修改mantis上的bug#100)</strong></h2>    <p>命令: git checkout -b mantis100</p>    <p>说明:命令执行完成后, 会自动创建并切换至mantis100分支,因此HEAD会指向此分支(mantis100)。</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/916c2cf9bb078f902285879aa5aff5fb.png"></p>    <h2><strong>3. 修改bug#100并在mantis100分支上进行提交</strong></h2>    <p>命令: git add, git commit</p>    <p>说明:在修改bug#100的过程中,服务器上会有新的提交(S4,S5)。</p>    <p>mantis100分支指针会随着提交而移动,始终指当前分支的最后一次提交(L1,L2)</p>    <p>由于没有直接在master分支提交,master指针不变。</p>    <p>remote/origin/master指针在(通过fetch, pull等同步命令)与服务器同步前始终不变。</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/fa98cba50d9b98c3dc3c2abeed2f29bb.png"></p>    <h2><strong>4. 使用fetch指令获取服务器上的更新</strong></h2>    <p>命令: git fetch origin</p>    <p>说明:fetch只会把服务器上的更新拉取到本地,不会与本地的master分支进行合并。</p>    <p>remote/origin/master会始终指向获取到的最后一个远程修改。</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/bb7fe60a51564052a82e2308734c0319.png"></p>    <h2><strong>5. 切换至master分支</strong></h2>    <p>命令: git checkout master</p>    <p>说明:其实就是HEAD指针指向master, mantis100和master指针均不变</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/8eb36e62988cb0a9fa7ff8c1ef27eb13.png"></p>    <h2><strong>6. 使用rebase命令更新master分支</strong></h2>    <p>命令: git rebase origin/master</p>    <p>说明:目的是使master分支与remote/origin/master分支保持一致, 为后面的cherry-pick做准备</p>    <p>由于master分支上没有在本地提交过修改,因此这个指令不会导致合并动作, 仅将master分支的指针移动至remote/origin/master所指向的节点。</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/f65292fd9308086c2bbdedd096af8cea.png"></p>    <h2><strong>7. 使用cherry-pick命令追加mantis100分支上的修改</strong></h2>    <p>命令: git cherry-pick L1,git cherry-pick L2</p>    <p>说明:有选择性地将L1或L2追加到master分支的末尾,这部分被追加的修改将会被推送到服务器。</p>    <p>图示:</p>    <p><img src="https://simg.open-open.com/show/b373d944d6990fae18cfc845d62ea070.png"></p>    <h2><strong>8. 删除mantis100分支</strong></h2>    <p>命令: git branch -d mantis100</p>    <p>说明:此时mantis100上的修改已经追加到master分支上准备push了,因此mantis100分支已经完成了它的历史使命,可以删除了。</p>    <p>不建议继续在这个分支上进行开发, 否则会导致分支间的关联过于复杂而产生各种依赖问题。</p>    <p>图示:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/e606692275177c061d3a9a2af184072f.png"></p>    <h2><strong>9. 使用push命令推送修改至review服务器</strong></h2>    <p>命令: git push origin HEAD:refs/for/master</p>    <p>说明:master分支上,在remote/origin/master之后的修改将被推送至代码审核服务器</p>    <p>注意:各个修改的change-id不能相同,否则会出错。</p>    <p>注: 第5步至第7步也可以通过直接在mantis100分支上使用rebase指令来实现。基本思路为:</p>    <p>当remote/origin/master已经通过fetch命令更新了以后,在mantis100分支上:</p>    <p>1. 直接将mantis100分支的修改rebase到remote/origin/master,git rebase origin/master</p>    <p>2. 如果rebase过程中产生冲突,需要手动解决冲突并add修改后文件,再执行rebase –continue</p>    <p>3. 切换回master,并将master分支直接rebase到mantis100分支</p>    <p>4. 删除mantis100分支。</p>    <p> </p>    <p>来自:http://www.jianshu.com/p/60fac8b97465</p>    <p> </p>