无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻动态 > 行业新闻 >

Git 支系

时间:2021-03-27 22:54来源:未知 作者:jianzhan 点击:
支系的在建与合拼要我们看来一个简易的支系在建与支系合拼的事例,具体工作中中你可以能用到到相近的工作中流。 你将亲身经历以下流程:开发设计某一网站。为完成某一新的要求
支系的在建与合拼

要我们看来一个简易的支系在建与支系合拼的事例,具体工作中中你可以能用到到相近的工作中流。 你将亲身经历以下流程:

开发设计某一网站。 为完成某一新的要求,建立一个支系。 在这里个支系上进行工作中。

已经这时,你忽然收到一个电話说有一个很比较严重的难题必须应急修复。 你将依照以下方法来解决:

转换到你的网上支系(production branch)。 为这一应急每日任务在建一个支系,并在这其中修补它。 在检测根据以后,转换回网上支系,随后合拼这一修复支系,最终将修改消息推送到网上支系。 转换回你最开始工作中的支系上,再次工作中。

最先,大家假定你已经你的新项目上工作中,而且早已有一些递交。

一个简单的提交历史。

Figure 3-10. 一个简易递交历史时间

如今,你早已决策要处理你的企业应用的难题跟踪系统软件中的 #53 难题。 要想在建一个支系并同时转换到哪个支系上,你可以以运作一个含有 -b 主要参数的 git checkout 指令:

$ git checkout -b iss53
Switched to a new branch "iss53"

它是下边两根指令的缩写:

$ git branch iss53
$ git checkout iss53
创建一个新分支指针。

Figure 3-11. 建立一个新支系指针

你再次在 #53 难题上工作中,而且干了一些递交。 在此全过程中,iss53 支系不在断的往前推动,由于你早已验出到该支系(换句话说,你的 HEAD 指针偏向了 iss53 支系)

< $ mit -a -m 'added a new footer [issue 53]' iss53 分支随着工作的进展向前推进。

Figure 3-12. iss53 支系伴随着工作中的进度往前推动

如今你收到哪个电話,有一个应急难题等候你去处理。 拥有 Git 的协助,你没必把这一应急难题和 iss53 的改动混在一起,你都不必须花些气力来复原有关 53# 难题的改动,随后再加上有关这一应急难题的改动,最终将这一改动递交到网上支系。 你所需做的只是是转换回 master 支系。

可是,在你那么做以前,要注意你的工作中文件目录和暂存区域这些还没有有被递交的改动,它将会会与你将要验出的支系造成矛盾进而阻拦 Git 转换到该支系。 最好的方式是,在你转换支系以前,维持好一个整洁的情况。 有一些方式能够绕开这一难题(即,储存进展(stashing) mit amending)),大家会在 贮藏与清除 看出到有关这2个指令的详细介绍。 如今,大家假定你早已将你的改动所有递交了,这时候你可以以转换回 master 支系了:

$ git checkout master
Switched to branch 'master'

这一情况下,你的工作中文件目录与你在刚开始 #53 难题以前如出一辙,如今你可以以专心致志修补应急难题了。 请铭记:如果你转换支系的情况下,Git 会重设你的工作中文件目录,使其看上去像返回了你一直在哪个支系上最终一次递交的模样。 Git 会全自动加上、删掉、改动文档以保证这时你的工作中文件目录和这一支系最终一次递交时的模样如出一辙。

接下去,你需要修补这一应急难题。 要我们创建一个对于该应急难题的支系(hotfix branch),在该支系上工作中直至难题处理:

$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ 
$ mit -a -m 'fixed the broken email address'
[hotfix 1fb7853] fixed the broken email address
 1 file changed, 2 insertions(+)
基于 master 分支的紧急问题分支(hotfix branch)。

Figure 3-13. 根据 master 支系的应急难题支系 hotfix branch

你可以以运作你的检测,保证你的改动是恰当的,随后将其合拼回你的 master 支系来布署到网上。 你可以令其用 git merge 指令来做到所述目地:

$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
  | 2 ++
 1 file changed, 2 insertions(+)

在合拼的情况下,你应当留意来到 快放(fast-forward) 这一词。 因为当今 master 支系特指向的递交就是你当今递交(相关 hotfix 的递交)的立即上下游,因此 Git 仅仅简易的将指针往前移动。 也就是说,如果你尝试合拼2个支系时,假如沿着一个支系走下来可以抵达另外一个支系,那麼 Git 在合拼二者的情况下,总是简易的将指针往前推动(指针右移),由于这类状况下的合拼实际操作沒有必须处理的矛盾——这就称为 “快放(fast-forward)”。

如今,全新的改动早已在 master 支系特指向的递交快照更新中,你可以以下手公布该修补了。

 master 被快进到 hotfix 。

Figure 3-14. master 被快放到 hotfix

有关这一应急难题的处理计划方案公布以后,你提前准备返回挨打断以前时的工作中中。 但是,你应当先删掉hotfix 支系,由于你早已已不必须它了 —— master 支系早已偏向了同一个部位。 你可以令其用带 -d 选择项的 git branch 指令来删掉支系:

$ git branch -d hotfix
Deleted branch hotfix (3a0874c).

如今你可以以转换回你已经工作中的支系再次你的工作中,也便是对于 #53 难题的哪个支系(iss53 支系)。

$ git checkout iss53
Switched to branch "iss53"
$ 
$ mit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+)
继续在 iss53 分支上的工作。

Figure 3-15. 再次在 iss53 支系上的工作中

你一直在 hotfix 支系上所做的工作中并沒有包括到 iss53 支系中。 假如你必须拉取 hotfix 所做的改动,你可以令其用 git merge master 指令将 master 支系合拼入 iss53 支系,或是你还可以直到 iss53 支系进行其重任,再将其合拼回 master 支系。


支系的合拼

假定你早已调整了 #53 难题,而且准备将你的工作中合拼入 master 支系。 因此,你必须合拼 iss53 支系到 master 支系,这和以前你合拼 hotfix 支系所做的工作中类似。 你只必须验出到你要合拼入的支系,随后运作 git merge 指令:

$ git checkout master
Switched to branch 'master'
$ git merge iss53
Merge made by the 'recursive' strategy.
 | 1 +
1 file changed, 1 insertion(+)

这与你以前合拼 hotfix 支系的情况下看上去有一点不一样。 在这里种状况下,你的开发设计历史时间从一个更早的地区刚开始分叉起来(diverged)。 由于,master 支系所属递交其实不是 iss53 支系所属递交的立即先祖,Git 不可不做一些附加的工作中。 出現这类状况的情况下,Git 会应用2个支系的尾端特指的快照更新(C4 和 C5)及其这2个支系的工作中先祖(C2),做一个简易的三方合拼。

一次典型合并中所用到的三个快照。

Figure 3-16. 一次典型性合拼中常采用的三个快照更新

和中间将支系指针往前推动所不一样的是,Git 将本次三方合拼的結果干了一个新的快照更新而且全自动建立一个新的递交偏向它。 这一被称之为一次合拼递交,它的非常的地方取决于他有不仅一个父递交。

一个合并提交。

Figure 3-17. 一个合拼递交

必须强调的是,Git 会自主决策选择哪个递交做为最佳的相互先祖,并且以此做为合拼的基本;这和更为历史悠久的 CVS 系统软件或是 Subversion (1.5 版本号以前)不一样,在这里些历史悠久的版本号管理方法系统软件中,客户必须自身挑选最好的合拼基本。 Git 的这一优点使其在合拼实际操作上比别的系统软件要简易许多。

即然你的改动早已合拼进去了,你早已已不必须 iss53 支系了。 如今你可以以在每日任务跟踪系统软件中关掉该项每日任务,并删掉这一支系。

$ git branch -d iss53

碰到矛盾时的支系合拼

有时候候合拼实际操作不容易这般圆满。 假如你一直在2个不一样的支系中,对同一个文档的同一个一部分开展了不一样的改动,Git 就无法整洁的合拼他们。 假如你对 #53 难题的改动和相关 hotfix 的改动都涉及到到同一个文档的同一处,在合拼他们的情况下便会造成合拼矛盾:

$ git merge iss53


Automatic merge failed; fix conflicts mit the result.

这时 Git 干了合拼,可是沒有全自动地建立一个新的合拼递交。 Git 会中止出来,等候你来处理合拼造成的矛盾。 你可以以在合拼矛盾后的随意時刻应用 git status 指令来查询这些因包括合拼矛盾而处在未合拼(unmerged)情况的文档:

$ git status
On branch master
You have unmerged paths.
 (fix conflicts and run "mit")
Unmerged paths:
 (use "git add file ..." to mark resolution)
 
no changes mit (use "git add" and/or "mit -a")

一切因包括合拼矛盾而尚需处理的文档,都是以未合拼情况标志出去。 Git 会在有矛盾的文档里加入规范的矛盾处理标识,那样你可以以开启这种包括矛盾的文档随后手动式处理矛盾。 出現矛盾的文档会包括一些独特区间,看上去像下边这一模样:

< div id="footer" contact : email.support /div ======= div id="footer" please contact us at support /div

这表明 HEAD 特指示的版本号(也便是你的 master 支系所属的部位,由于你一直在运作 merge 指令的情况下早已验出来到这一支系)在这里个区间的上部分(======= 的上部分),而 iss53 支系特指示的版本号在======= 的下边一部分。 以便处理矛盾,你务必挑选应用由 ======= 切分的两台分中的一个,或是你还可以自主合拼这种內容。 比如,你可以以根据把这一段內容换为下边的模样来处理矛盾:

 div id="footer" 
please contact us at email.support
 /div 

所述的矛盾处理计划方案仅保存了在其中一个支系的改动,而且 , ======= , 和 这种行被彻底删掉了。 在你处理了全部文档里的矛盾以后,对每一个文档应用 git add 指令来将其标识为矛盾已处理。 一旦暂存这种本来有矛盾的文档,Git 便会将他们标识为矛盾已处理。

假如你要应用图型化工厂具来处理矛盾,你可以以运作 git mergetool,该指令会给你起动一个适合的可视性化合拼专用工具,并领着你一步一步处理这种矛盾:

$ git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis pare vimdiff emerge
Merging:

':
 {local}: modified file
 {remote}: modified file
Hit return to start merge resolution tool (opendiff):

假如你要应用除默认设置专用工具(在这里里 Git 应用 opendiff 作为默认设置的合拼专用工具,由于创作者在 Mac 上运作该程序)外的别的合拼专用工具,你可以以在 “以下专用工具中(one of the following tools)” 这句话后边见到全部适用的合拼专用工具。 随后键入你喜爱的专用工具姓名便可以了。

假如你必须更为高級的专用工具来处理繁杂的合拼矛盾,大家会在 高級合拼 详细介绍大量有关支系合拼的內容。

等着你撤出合拼专用工具以后,Git 会了解刚刚的合拼是不是取得成功。 假如你回应是,Git 会暂存这些文档以说明矛盾已处理: 你可以以再度运作 git status 来确定全部的合拼矛盾早已被处理:

$ git status
On branch master
All conflicts fixed but you are still merging.
 (use "mit" to conclude merge)
Changes mitted:
 

假如你对結果觉得令人满意,而且明确以前有矛盾的的文档早已经暂存了,mit 来进行合拼递交。 默认设置状况下递交信息内容看上去像下边这一模样:

Merge branch 'iss53'
Conflicts:
 
# It looks like you mitting a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.

# Please mit message for your changes. Lines starting # with '#' will be ignored, and an empty message mit. # On branch master # All conflicts fixed but you are still merging. # Changes mitted: # #

假如你感觉所述的信息内容不足充足,不可以彻底反映支系合拼的全过程,你可以以改动所述信息内容,加上一些关键点给将来检查这一合拼的阅读者一些协助,告知她们你是怎样处理合拼矛盾的,及其原因是啥。


企业网站建设_seo优化_seo_仿站_手机软件开发设计_网页页面制作_营销推广型企业网站建设_互联网营销推广业务外包—武汉市麦芒 - Powered by  鄂ICP备号-1 (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信