哈喽大家好 發表於 2020-6-2 23:12:00

7、Gitee的分支操作

<h2 class="md-end-block md-heading"><span class="md-plain">分支的理解</span></h2>
<p class="md-end-block md-p"><span class="md-plain">我们先说一个简单的案例,团队开发一个项目时,A同事想要增加一个新的功能,假设需要一周完成,但是A同时写了其中的30%,先提交到了主分支,其他人就无法提交自己改的,因为其他人提交上去的话,就被覆盖了,所以需要等到A同事写完才能提交上去,但是大家又看不到他的进度,也不能继续干活,这怎么办呢?</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">需要就出现了分支管理的办法,A同事需要新增功能的话,就创建一个属于他的分支,比如dev,A同事只需要在dev分支上干活就好了,也不会影响到master主分支,那么所有人都可以正常工作。</span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">分支合并</span></h2>
<h3 class="md-end-block md-heading"><span class="md-plain md-expand">创建分支</span></h3>
<p class="md-end-block md-p md-focus"><span class="md-plain">假设自己的A同事,现在需要增加功能,那么就创建一个dev分支,并将代码上传到dev分支上。</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230441175-747377126.png" alt=""></span></p>
<p>如下图所示,我们创建了dev分支,但是HEAD指针还是指向了master主分支<img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230451005-1941662636.png" alt=""></p>
<p>&nbsp;<strong><span class="md-plain">git checkout命令加上-b参数表示<span><span class="md-plain">创建并切换分支</span><span class="md-plain">上。</span></span></span></strong></p>
<div class="cnblogs_code">
<pre>git checkout -b dev</pre>
</div>
<h3 class="md-end-block md-heading"><span class="md-plain">切换分支</span></h3>
<p class="md-end-block md-p md-focus"><span class="md-plain">要通过dev分支提交并pull,所以需要切换到dev分支上</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">git checkout dev
git branch </span>-a # 查看所有分支情况</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230531122-499645215.png" alt=""></p>
<p>&nbsp;<span class="md-expand"><code>git branch -a</code><span class="md-plain md-expand">命令可以查看所有分支,现在我们HEAD指针便指向dev分支,大家可以在上图中看到dev分支上有个*号。</span></span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230540241-1608858297.png" alt=""></span></p>
<h3 class="md-end-block md-heading"><span class="md-plain">合并分支</span></h3>
<p class="md-end-block md-p md-focus"><span><strong>1、创建一个temp.txt文</strong></span><strong>件,通过master提交并push到远程仓库</strong></p>
<p class="md-end-block md-p md-focus"><span class="md-plain"><strong><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230647193-39688086.png" alt=""></strong></span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230701729-1195348184.png" alt="">&nbsp;<img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230707197-1392302221.png" alt=""></span></p>
<p class="md-end-block md-p"><span><strong>2、切换到dev分支,修改temp.txt内容并提交</strong></span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain">该项目有一个测试文件 temp.txt,我们修改它的内容,并通过dev分支提交一下。</span></p>
</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">vim temp.txt
</span><span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> temp.txt
git add temp.txt
git commit </span>-m <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dev commit</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230726518-175357362.png" alt="">&nbsp;<img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230731459-1374894429.png" alt=""></p>
<p><strong><span class="md-plain">3、切换回master分支,查看temp.txt文件是否有修改</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">git checkout master
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> temp.txt</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230743226-1368129797.png" alt=""></p>
<p>&nbsp;大家可以看到我们刚才增加的一行内容不见了,嘿嘿。因为那个提交是在dev分支上,而master分支没有变化。好了,下面我们来演示一下合并分支。</p>
<p class="md-end-block md-p">&nbsp;</p>
<p class="md-end-block md-p"><span><strong>4、合并分支(快速合并)</strong></span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">现在,我们把dev分支的工作成果合并到master分支上,如下图:</span></p>
</li>
</ul>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand"><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230755423-40159875.png" alt=""></span>&nbsp;</p>
<p class="md-end-block md-p"><span class="md-plain">大家注意到上面的 <span><strong>Fast-forward</strong><span class="md-plain"> 信息,Git告诉我们,这次<span><strong>合并是“快进模式”</strong><span class="md-plain">,也就是直接把master指向dev的当前提交,所以合并速度 非常快。当然,也不是每次合并都能Fast-forward,我们后面会将其他方式的合并。合并完成后,<span><strong>就可以放心地删除dev分支了</strong><span class="md-plain">。</span></span></span></span></span></span></span></p>
<h3 class="md-end-block md-heading"><span class="md-plain">分支删除</span></h3>
<p class="md-end-block md-p md-focus"><span class="md-plain">下面我们来演示一下删除分支,如下图:</span></p>
<div class="cnblogs_code">
<pre>git branch -<span style="color: rgba(0, 0, 0, 1)">d dev    # 删除dev分支
git branch </span>-a # 查看所有分支</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230846125-160140182.png" alt=""></p>
<h3 class="md-end-block md-heading"><span class="md-plain">小结</span></h3>
<p class="md-end-block md-p"><span class="md-plain">大家在实际操作中可以发现在我们创建、合并、删除分支的速度非常快吧,这和直接在master分支上工作效果是一样的,但过程更安全,更可靠。下面我们来简单的总结一下:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">查看分支 git branch -a</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">创建分支 git branch name</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">切换分支 git checkout name</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">创建并切换 git checkout -b name</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">合并某分支到当前分支 git merge name</span></p>
</li>
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain">删除分支 git branch -d name</span></p>
</li>
</ul>
<h3 class="md-end-block md-heading"><span class="md-plain">分支合并冲突</span></h3>
<p class="md-end-block md-p md-focus"><span><strong>1)下面我们来演示一下不同分支修改同一个文件产生冲突问题,下面我们来创建一个新的分支,继续开发新功能:</strong></span></p>
<div class="cnblogs_code">
<pre>git checkout -<span style="color: rgba(0, 0, 0, 1)">b new1
vim temp.txt
</span><span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> temp.txt
git add temp.txt
git commit </span>-m <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">new1 修改</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230919497-1901193114.png" alt=""></p>
<p>&nbsp;<strong><span class="md-plain">2)现在我们将分支切换到master分支上修改temp.txt内容并提交,如下图:</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">git checkout master
vim temp.txt
</span><span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> temp.txt
git add temp.txt
git commit </span>-m <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">master 修改</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230931669-978389055.png" alt=""></p>
<p class="md-end-block md-p"><span><strong>3、快速合并及解决冲突</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,如下图:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain">并且后面的分支显示变成了 (master|MERGING)</span></p>
</li>
</ul>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230943390-1928382275.png" alt=""></span></p>
<p>&nbsp;果然冲突了,Git告诉我们temp.txt文件存在冲突,必须手动解决冲突后再提交。下面我们用git status查看一下状态:</p>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602230956510-741335581.png" alt=""></p>
<p>&nbsp;我们发现temp.txt的内容,合并了new1分支和master主分支修改过的信息</p>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602231006454-1178589566.png" alt=""></p>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602231017895-2023257957.png" alt=""></p>
<p class="md-end-block md-p"><span class="md-plain">所以这个时候就需要团队的人员进行商讨,要保留谁的</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain">保留了new1分支的内容,并重新提交了</span></p>
</li>
</ul>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602231031029-1156254022.png" alt=""></span></p>
<p class="md-end-block md-p"><span class="md-plain">好了,到这我们的分支合并冲突就讲解完成了,下面我们来删除分支。</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">最后,我们可以用 git log --graph --pretty=oneline --abbrev-commit 命令,查看一下分支合并。如下图:</span></p>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202006/1927057-20200602231048305-1365374102.png" alt=""></p>
<h3 class="md-end-block md-heading"><span class="md-plain">分支提交</span></h3>
<p>(1)新建分支</p>
<blockquote>
<p>git branch xxx (xxx填写你的分支名称)</p>
</blockquote>
<p>(2)查看所有分支</p>
<blockquote>
<p>git branch -a</p>
</blockquote>
<p>(3)切换到某一分支</p>
<blockquote>
<p>git checkout xxx (xxx填写要切换的分支名称)</p>
</blockquote>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202007/1927057-20200717142338023-1693628451.png" alt="" loading="lazy"></p>
<p>(4)添加修改代码到缓存(注意最后的"."前面有个空格</p>
<blockquote>
<p>git add .</p>
</blockquote>
<p>(5)添加提交代码的备注</p>
<blockquote>
<p>git commit -m "xxx" (xxx为本次提交代码的备注)</p>
</blockquote>
<p>(6)提交代码到指定分支</p>
<blockquote>
<p>git push origin xxx (xxx为要提交代码的分支名称)</p>
</blockquote>
<p><img src="https://img2020.cnblogs.com/blog/1927057/202007/1927057-20200717142525371-92062510.png" alt="" loading="lazy"></p>
<blockquote>
<p>测试结果</p>
</blockquote>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/1927057/202007/1927057-20200717142159960-767938693.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">具体分支讲解,请参考<span class="md-link"><span class="md-plain">博客</span></span></span></p>
<p><span class="md-link">&nbsp;</span></p>

</div>
<div id="MySignature" role="contentinfo">
    致力于记录学习过程中的笔记,希望大家有所帮助(*^▽^*)!<br><br>
来源:https://www.cnblogs.com/zxhbk/p/13034535.html
頁: [1]
查看完整版本: 7、Gitee的分支操作