返回您原来工作的分支并继续工作。
创建一个新分支
首先,我们假设您正在开发一个项目并且已经进行了一些提交。
[外部链接图像正在传输.(img-s8LMmNix-1719210450455)]
图3-10. 简单提交历史记录您决定解决公司使用的问题跟踪系统中的问题#53。 要创建新分支并同时切换到该分支,请运行带有-b 参数的git checkout 命令。
$ git checkout -b iss53
切换到新分支“iss53”
这是以下两个命令的缩写:
$ git 分支iss53
$ git checkout iss53
[外部链接图像正在传输.(img-B3zRzeQX-1719210450456)]
图3-11. 创建新的分支指针继续处理问题#53 并进行一些提交。 在这个过程中,iss53分支始终向前移动,因为我们已经检出了该分支(即HEAD指针指向iss53分支)。
$ vim 索引.html
$ git commit -a -m \’添加了新页脚[issue 53]\’
[外部链接图片正在传输中.(img-1Ihu9zXl-1719210450456)]
图3-12.iss53 分公司随着工作的进展向前推进当您接到电话时,您有一个紧急问题需要解决。借助Git,您不必将这个紧急问题与iss53 的更改混淆,将更改移回53# 问题,然后将更改移至解决紧急问题,最后将其移动到在线分支。 您需要做的就是切换到master 分支。
但是,在执行此操作之前,请注意您的工作目录和暂存区域中存在未提交的更改。这可能与您尝试签出的分支冲突并阻止Git 切换到该分支。 最好的方法是在切换分支之前保持干净的状态。 有一些方法可以解决这个问题(即存储和提交修复),这两种方法都在存储和清理中讨论。 现在假设您可以提交所有更改并返回到主分支。
$ git checkout 大师
切换到分支“master”
此时,您的工作目录与开始第53 个问题之前的目录完全相同,您可以专注于解决紧急问题。 请记住:当您切换分支时,Git 会重置您的工作目录,并使其看起来好像您已返回到在该分支上所做的最后一次提交。 Git 会自动添加、删除和修改文件,以便您的工作目录与该分支上的最后一次提交完全相同。
接下来,您想要解决一个紧急问题。 针对热点问题创建一个修补程序分支并对其进行处理,直到问题得到解决。
$ git checkout -b 修补程序
切换到新分支“Hotfix”
$ vim 索引.html
$ git commit -a -m \’修复损坏的电子邮件地址\’
[修补程序1fb7853] 修复了损坏的电子邮件地址
1 个文件更改,2 个插入(+)
[正在传输外部链接图像.(img-v0rp4rIC-1719210450457)]
图3-13. 基于master 分支的Hotfix 分支您可以测试您的更改以确保它们是正确的,将它们合并到master 分支中,然后在线部署它们。可以使用git merge命令来达到上述目的。
$ git checkout 大师
$ git 合并修补程序
更新f42c576.3a0874c
快进
索引.html 2++
1 个文件更改,2 个插入(+)
合并时,请注意“快进”一词。 当前主分支指向的提交紧邻当前提交(有关修补程序的提交)的上游,因此Git 只是将指针向前移动。 换句话说,如果你尝试合并两个分支,并且可以沿着一个分支到达另一个分支,那么在合并两个分支时,Git 只会将指针向前推进(将指针向右移动),因此不会进行合并操作。被执行。在这种情况下,不存在需要解决的差异。这称为“快进”。
现在您的最新更改已包含在master 分支指向的提交快照中,您可以开始发布修复程序。
[外部链接图片正在传输中.(img-fCxzybqL-1719210450458)]
图3-14。针对此紧急问题的修补程序发布后,您可以快进master并返回到中断之前的工作。 但是,——master分支已经指向同一位置,因此您需要先删除hotfix分支。您可以使用带-d 选项的git Branch 命令删除分支。
$ git分支-d修补程序
删除了分支修补程序(3a0874c)。
您现在可以返回到您正在处理的分支(问题#53 的分支(iss53 分支))并继续工作。
$ git checkout iss53
切换到分支“iss53”
$ vim 索引.html
$ git commit -a -m \’完成新页脚[issue 53]\’
[iss53 ad82d7a] 新页脚已完成[第53 期]
1 次文件更改,1 次插入(+)
[正在传输外部链接图像.(img-AEWfU0CD-1719210450458)]
图3-15. 在iss53 分支中继续工作您在hotfix 分支中所做的工作不包含在iss53 分支中。 如果需要拉取修补程序所做的更改,请使用git merge master 命令将master 分支合并到iss53 分支,或者等到iss53 分支完成其任务后再将其合并回master 分支。
合并分支
假设您修复了问题#53 并计划将该工作合并到master 分支中。 为此,我们需要将iss53 分支合并到master 分支。这与您在合并修补程序分支之前所做的类似。 只需检查要合并到的分支并运行git merge 命令即可。
$ git checkout 大师
切换到分支“master”
$ git 合并iss53
通过“递归”策略完成合并。
索引.html 1+
1 次文件更改,1 次插入(+)
这与之前合并修补程序分支时略有不同。 在这种情况下,发展历史已经与之前的情况背道而驰。 master分支所在的提交不是iss53分支所在提交的直接祖先,因此Git必须做额外的工作。 发生这种情况时,Git 使用两个分支(C4 和C5)末端指向的快照以及两个分支(C2) 的工作祖先来执行简单的三向合并。
[外部链接图片正在传输中.(img-yCbnfvBs-1719210450459)]
图3-16. 常规合并和移动分支指针中使用的三个快照之间的区别在于,Git 创建了三向合并结果的新快照,并自动将新的提交点指向它。 这称为合并提交。其特别之处在于有多个父提交。
[正在传输外部链接图像.(img-S47sop0R-1719210450459)]
图3-17 需要指出的是,关于合并提交,Git 独立确定哪个提交是最常见的祖先,并将其用作合并的基础。这与旧的CVS系统和Subversion不同。 (1.5 版之前)相比之下,这些较旧的版本控制系统要求用户自己选择最佳的合并标准。 Git 的这一优势使得合并操作比其他系统容易得多。
由于更改已合并,因此不再需要iss53 分支。 现在您可以关闭此任务并在任务跟踪系统中删除此分支。
$ git 分支-d iss53
发生冲突时合并分支
在某些情况下,合并操作可能不会那么顺利。如果您在两个不同的分支中对同一文件的相同部分进行不同的更改,Git 将无法干净地合并它们。 如果对问题#53 的更改和与修补程序相关的更改都包含同一文件的相同部分,则在合并它们时会发生合并冲突。
$ git 合并iss53
自动合并index.html
CONFLICT(内容):index.html 合并冲突
自动合并失败。解决冲突,然后提交结果。
此时,Git 执行了合并,但没有自动创建新的合并提交。 Git 暂停并等待,直到合并引起的冲突得到解决。 发生合并冲突后,您可以随时使用git status 命令查看处于未合并状态的文件,因为它们包含合并冲突。
$ git 状态
关于分支主控
存在未合并的路径。
(修复冲突并运行“git commit”)
未合并路径:
(使用“git add file.”来标记解决方案)
都修改了:index.html
提交中不会添加任何更改(使用“git add”和/或“git commit -a”)
由于包含合并冲突而等待解决的文件被标识为未合并。 Git 将标准冲突解决标记添加到冲突文件中,以便您可以打开冲突文件并手动解决冲突。 冲突的文件包含一个特殊部分,如下所示:
HEAD:index.html
div id=\’footer\’contact : email.support@github.com/div
=======
div id=\’页脚\’
请通过support@github.com 联系我们。
/div
iss53:index.html
这意味着HEAD 指示的版本(主分支位置,因为您在运行合并命令时签出了此分支)位于此部分的顶部(========顶部)。 half),iss53分支指示的版本在=======的下半部分。 要解决冲突,您可以选择使用=======分隔的两部分之一,也可以自行合并内容。 例如,您可以通过将此内容更改为以下内容来解决冲突:
div id=\’页脚\’
请通过email.support@github.com/div 联系我们。
上述冲突解决方案将仅保留分支中的一项更改=======并完全删除这些行。 解决所有文件的冲突后,对每个文件使用git add 命令将其标记为已解决。 当这些最初存在冲突的文件被暂存时,Git 将它们标记为冲突已解决。
如果您更喜欢使用图形工具解决冲突,运行git mergetool 会启动相应的可视化合并工具,并提供解决这些冲突的分步说明。
$ git 合并工具
出现此消息是因为未配置“merge.tool”。
有关更多信息,请参阅“git mergetool –tool-help”或“git help config”。
“git mergetool”尝试使用以下工具之一:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff 扩散diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
合并:
索引.html
“index.html”的正常合并冲突:
{local}: 修改文件
{remote}: 修改文件
按Return 键启动合并解析器(opendiff):
如果你想使用默认以外的合并工具(本例中,作者是在Mac 上运行程序,Git 使用opendiff 作为默认合并工具),使用以下工具之一即可。在此语句后使用合并工具。 然后输入您最喜欢的工具的名称。
笔记
如果您需要更高级的工具来解决复杂的合并冲突,请参阅高级合并以获取有关分支合并的更多信息。
当您退出合并工具时,Git 会询问您当前合并是否成功。如果您回答“是”,Git 会暂存这些文件并指示冲突已解决。您可以再次运行git status 以确认所有合并冲突均已解决。
$ git 状态
关于分支主控
所有冲突均已解决,但仍在合并。
(使用“git commit”完成合并)
已提交的更改:
修改:index.html
如果您对结果感到满意并且已验证所有冲突文件均已暂存,则可以通过键入git commit 来完成合并提交。 默认情况下,提交消息如下所示:
合并分支“iss53”
冲突:
索引.html
#
# 看起来您正在提交合并。
# 如果不正确,请删除该文件
#.git/MERGE_HEAD
# 并尝试更多。
# 输入更改的提交消息。
# \’#\’ 被忽略,空消息会中止提交。
# 在分支主控上
# 所有冲突均已修复,但仍在合并中。
#
#已提交的更改:
#modified:index.html
#
如果您觉得上述信息不足以完全反映合并分支的过程,请修改上面的信息以添加更多细节,并提醒将来查看此合并的读者告诉我们您是如何解决的以及原因。
Git Branches – 分支管理
分行管理
现在我们已经创建、合并、删除了一些分支,下面我们来看看一些常用的分支管理工具。
git Branch 命令只能创建和删除分支。如果不带参数运行,它将显示所有当前分支的列表。
$ git 分支
国际空间站53号
* 掌握
测试
请注意master 分支之前的* 字符。这代表当前检出的分支(即当前HEAD指针指向的分支)。 这意味着如果您此时提交,主分支可以继续您的新工作。 如果需要查看每个分支的最后一次提交,可以运行gitbranch -v 命令。
$ git 分支-v
iss53 93b412c 修复了JavaScript 问题
* 合并master 7a98805分支\’iss53\’
将scott 添加到测试782fd34 自述文件的作者列表
两个有用的选项-merged 和–no-merged 允许您过滤已合并或尚未合并到当前分支的分支列表。 如果你想查看哪些分支已合并到当前分支中,可以运行git Branch –merged。
$ git 分支–merged
国际空间站53号
*掌握
iss53 分支出现在列表中,因为它之前已合并。 此列表中名称前面没有* 的分支通常其工作已经集成到另一个分支中,因此您可以使用git Branch -d 删除它们。所以什么也没有丢失。
运行git Branch –no-merged 查看所有未合并工作的分支。
$ git 分支–no-merged
测试
其他分支将出现在这里。 尝试使用git Branch -d 命令删除它将会失败,因为它包含尚未合并的工作。
$ git 分支-d 测试
error: 分支“测试”尚未完全合并。
如果您确实想删除它,请运行“git Branch -Dtesting”。
正如帮助消息所述,如果您确实想删除分支并丢失您的工作,可以使用-D 选项强制删除分支。
1.4 Git 分支- 分支开发工作流程
分支开发工作流程
既然您知道如何创建和合并分支,那么您可以或应该用它们做什么?本节介绍一些使用分支的常见开发工作流程。这些典型的工作模式是考虑到分支机构管理的便利性而衍生的,可以根据项目的实际情况进行选择。
长期分支
Git 使用简单的三向合并,因此在很长一段时间内将一个分支重复合并到另一个分支并不困难。 换句话说,您可以在整个项目开发周期的不同阶段拥有多个开放分支,并且可以定期将某些功能分支合并到其他分支中。
许多使用Git 的开发人员更喜欢仅存储已发布或计划发布的代码,例如仅将完全稳定的代码保留在主分支中。 还有几个并行分支称为develop或next,用于保证后续开发或测试的稳定性。 这样,在确保这些已完成的功能分支(短期分支如之前的iss53 分支)通过了所有测试并且不会引入任何进一步的bug 后,就可以将它们合并到trunk 分支中,并使用下面的命令即可等待以便释放。
事实上,我们刚刚描述的是一个在提交时不断向右移动的指针。 指向稳定分支的指针总是位于提交历史记录的后面,但指向前沿分支的指针通常位于更靠前的位置。
[正在传输外部链接图像.(img-tC1vU2X0-1719210450460)]
图3-18. 渐进稳定分支的线性图最好将通过测试的提交视为被选择到更稳定的管道中。
[正在传输外部链接图像.(img-CTQp0h35-1719210450460)]
图3-19. 逐渐稳定的分支的管道(“筒仓”)视图这种方法允许您保持不同级别的稳定性。 一些大型项目也有Proproped(推荐)或pu: Proproped Update(推荐更新)分支,但它包含不成熟的内容,因此您可以将其移动到下一个分支或master 分支,它可能不适合。 这样做的目的是为分支提供不同级别的稳定性。一旦分支达到一定的稳定性级别,就将其合并到具有更高稳定性级别的分支。 同样,您不需要使用多个长期分支,但它通常很有用,特别是当您正在处理非常大或复杂的项目时。
我们专门整理了上百道【运维技术栈面试题】,成为您运维面试路上的好助手。这样,你就可以毫无惊慌地参加面试并获得高薪offer。
这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。
本次访谈集内容为
174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx面试题题77 redis面试题Zookeeper题28
总共1000多道面试题,内容全面且有价值。
174道运维工程师面试题
1.什么是运维?
2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?
3. 您目前有300台服务器,您如何管理它们?
4. 简要说明RAID0和Raid1raid5这两种工作模式的工作原理和特点。
5、LVS、Nginx、HAproxy有什么区别?
6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?
7.Tomcat和Resin有什么区别?
8.什么是中间件?
9、Tomcat中的8005、8009、8080这三个端口是什么意思?
10.什么是CDN?
11.什么是网站灰度发布?
12、请简单说明一下DNS域名解析的过程。
13.什么是RabbitMQ?
14.Keepalived如何工作?
15.描述LVS工作流程的三种模式。
16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?
当与运营人员打交道时,运营人员会做什么?
3. 您目前有300台服务器,您如何管理它们?
4. 简要说明RAID0和Raid1raid5这两种工作模式的工作原理和特点。
5.LVS、Nginx、HAproxy可用
什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
#以上关于Git分支的前世今生_git 前世的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92006.html