GIT深入学习——高级篇

本文深入探讨Git的高级用法,包括分支管理,如分支创建、切换、合并及解决冲突,介绍了merge和topic分支的规则。此外,讲解了与远程数据库交互的pull和push操作,以及标签的使用,包括轻标签和注解标签。最后,详述了如何改写提交,如amend、revert、reset、cherry-pick等操作,以及如何通过rebase-i和squash调整提交历史。
摘要由CSDN通过智能技术生成

沿用上一篇 (4条消息) GIT深入学习——基础篇_流鱼a_ec的博客-CSDN博客https://blog.csdn.net/m0_55401536/article/details/124806033?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124806033%22%2C%22source%22%3A%22m0_55401536%22%7D&ctrtid=0OWPs

的思路,继续进行下一步的研究。

前言

昨天进行了一些基本的GIT的功能以及模式的探讨。今天深入了解一下其高级用法。即高级篇。仍旧是以命令行为基本方式。

继承之前的做法。

主题:分支

阐述:分支(branch)是为了将修改记录的这个繁体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以进行多次的修改。

在软件开发时,可能有很多人同时为同一个软件进行多个功能的开发和版本管理。

分叉的分支可以合并。

为了不受其他开发人员的影响,可以在主分支上建立自己专用的分支。完成工作后将自己分支上的修改合并到主分支。因为每一次提交的历史记录都会被保存。所以当发生问题时,定位和修改造成的问题就容易多了。

master分支:在数据库进行最初的提交后,git会创建一个名为master的分支。因此之后的提交,在切换分支之前都会添加到master分支里。

分支的运用

在git中可以自由地建立分支。但是,首先要确定运用规则才可以有效地利用分支。以下为两种分支merge和topic的规则。

merge分支

merge分支是为了可以随时发布release而创建的分支。它还能作为topic分支的源分支使用。保持分支稳定的状态是十分重要的。如果啊哟进行更改,通常先创建topic分支,然后对该分支,使用工具进行自动化编译以及测试。

topic分支

topic分支是为了开发新的功能 或者修复bug而建立的分支。若要同时进行多个的任务,应该创建多个topic分支。

topic分支是从稳定的merge分支创建的。完成作业后,要将topic分支合并回merge分支。

分支的切换

若雅切换作业的分支,需要进行checkout操作。进行checkout时,git会从工作树中还原向目标分支提交修改的内容。checkout之后的修改记录将会被追加到分支。

HEAD:指向现在使用的分支的最后一次更新。

stash:还未提交的修改内容以及新添加的文件,留在索引区域或工作树的情况线下切换到其他的分支时,修改啊内容胡从原来的分支移动到目标分支。

stach是保存文件修改的临时区域。可以同时保存工作树和索引里还没有提交的修改内容,可以在事后再取出暂存的修改,应用到原先的分支或是其他的分支。

分支的合并

完成作业后的topic分支,最后要合并到merge分支。合并分支有两种方法:使用merge或rebase。使用这两种方法,合并后分支的历史记录会有很大的差别。

merge:可以合并多个历史记录的流程。即为加和并将最终结果作为当前的head。

rebase:可以将记录添加到master的分支之后。在master分支已有的基础上重新加入topic分支的内容,将topic分支的最近的一个修改内容作为head

主题:操作分支(命令行)

阐述:在命令行中进行相关操作。

mkdir new0517
cd new0517
git init
touch myfile.txt
git add myfile.txt
git commit -m "first commit"

建立分支

git branch issue1
git branch 

切换分支

#若要在新建的分支issue1提交,则需要进入新建的issue1分支
#要执行checkout命令以退出分支
git checkout issue1
#查看当前分支可以用命令git branch
#在checkout命令中指定-b选项则执行创建分支并进行切换
git checkout -b issue2
#在切换到issue1的分支的状态下提交,历史记录会被记录到issue1中,在myfile.txt添加add命令的说明后再提交。

合并分支

#执行merge命令以合并分支
git merge issue1
#将更改合并到issue1

删除分支

#issue1的内容已经合并到master了,因此可以将其删除了
git branch -d <branchname>

并行操作

#尝试创建两个分支进行并行操作
git branch issue2
git branch issue3
git checkout issue2
git branch 
#在issue2中修改muyfile.txt并将其提交
git add myfile.txt
git commit -m "forth commit"
git checkout issue3
git add myfile.txt
git commit -m "fifth commit"

 解决合并的冲突

把issue2分支和issue3分支的修改合并到master

切换master分后,与issue2合并,接着合并issue3分支。然后提交。结果是合并出错。之后会出现问题文档,然后需要手动解决。

 

如图。

但是将其更改到自己希望的样子后继续提交即可。

用rebase合并。

git reset ---hard HEAD ~
#暂时取消刚才的合并
切换到issue3分支后,对master进行rebase

主题:远端数据库

阐述:执行pull可以缺德远程数据库的历史记录,执行pull可以自动完成合并

执行pull,远程数据库会自动进行合并。但是,有时只是想确认本地数据库的内容而不想合并。在这种情况下,应该使用fetch。执行fetch会得到远程数据库最新的历史记录。

其实,pull是fetch+merge完成的。

push,从本地数据库push到远程数据库时,如果发生冲突,push数据库也会拒绝的。不会给远程数据库产生任何影响。

主题:标签

阐述:标签是为了更方便地参考提交而给它标上易读的名称。

可以使用两种标签:轻标签和注解标签。打上的标签是固定的,不能改变。

轻标签:

        添加名称

注解标签:

        添加名称

        添加注解

        添加签名

一般情况下,添加标签是采用注解标签来添加注解或签名的。轻标签是为了在本地一次性使用的。

主题:标签(命令行)

阐述:建立测试目录,进行相关的git操作。

mkdir new-hello
cd new-hello
git init
vim hello.txt
git add hello.txt
git commit -m "hello world"
git tag apple 
#对当前的HEAD进行标签标注
git tag
git log --decorate
git tag -a <tagname>
#进行详细标注
git tag -am "hello" banana
git tag -n

删除标签

git tag -d <tagname>

 主题:改写提交

阐述:指定amend选项进行提交的话,可以修改同一个分支最近的修改内容和注解。

主要使用的场合是添加最近提交时漏掉的档案;修改最近提交的注解

改写提交:取消过去的提交

在revert可以取消指定的修改内容,使用后面要提到的rebase -i 或reset也可以删除提交。但是,不能随便删除已经发布的提交,这时需要通过revert创建要否定的提交。

主要的使用场合:安全地取消过去的提交

改写提交:遗弃提交

在reset中可以遗弃已经不需要的提交,需要根据影响的范围而指定不同的模式。可以指定是否复原索引或工作树的内容。

除了默认的mixed模式,还有soft和hard模式。

主要使用场合:复原修改过的索引的状态;彻底取消最近的提交(hard),只取消提交(soft)。

改写提交:提取提交

在cherry-pick中,可以从其他分支复制指定的提交,然后导入到现在的分支。

主要使用场合:把弄错分支的提交移动到正确的地方;

把其他分支的提交添加到现在的分支。

改写提交的历史记录

在rebase指定选项,可以改写、替换‘删除或合并提交。

主要使用场合:

在push之前,重新输入正确的提交注解;

清楚地汇合内容含义相同的提交;

添加最近提交时漏掉的档案。

汇合分支上的提交,然后一同合并到分支

merge的特殊选项,squash

用这个选项指定分支的合并,就可以把所有汇合的提交添加到分支上。

主要场景:呼和主题分支的提交,并提交到目标分支。

主题:改写提交(命令行)

阐述:将修改最近一次的提交。

#用log命令确定历史记录
git log 
#修改myfile.txt内容
#添加--amend选项,然后提交
git add myfile.txt
git commit --amend 
#编辑会显示最近一次提交的提交消息,把消息修改并进行保存

rvert命令取消提交

git log
git revert HEAD
git log

reset

用reset删除master分支最前面的两个提交。

git log
git reset ==hard HEAD~~
git log
git reset --hard ORIG_HEAD

cherry-pick

git checkout master
git cherry-pick 99daed2
#若有冲突,则打开文件,修改冲突部分
git add myfile.txt
git commit

rebase -i 汇合提交

git rebase -i HEAD~~

#######
git commit --amend
git rebase --continue

git checkout master
git merge --squash issue1
git add myfile.txt
git commit

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王辞夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值