首页 > 其他分享 >14--git常用操作 | 青训营笔记

14--git常用操作 | 青训营笔记

时间:2023-01-31 00:00:53浏览次数:54  
标签:git 14 -- v1.0 master main bug 分支

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

学习资料

git 使用简易指南 (bootcss.com)

Git - Book (git-scm.com)

公司使用Gitlab管理项目实践指南

git思维导图-ProcessOn

pcottle/learnGitBranching

Learn Git Branching

Git常用命令

git四连

git add .                                将所有改动放进暂存区
git commit -m "描述"                     提交并附带概要信息
git pull                                 从远程仓库拉去代码
git push                                 推送代码到远程仓库(master分支)

其余常用命令

git log                                  查看日志
git log -p                               查看详细历史
git log --stat                           查看简要统计
git status                               查看工作区状态
git branch 名称                          创建分支
git checkout 名称                        切换分支
git checkout -b 名称                     创建并切换到新分支
git branch -d 名称                       删除该分支(不能删除当前所在的分支,不能删除没有合并到master上的分支)
git branch -D 名称                       删除该分支(可以删除没有合并到master上的分支)
git commit --amend                       对最新的一条commit进行修正
git reset --hard HEAD^                   丢弃最新提交(未提交的内容会被擦掉)
git reset --soft HEAD^                   丢弃最新提交(未提交的内容不会被擦掉)
git revert HEAD^                         回到某个commit
git rebase 目标基础点                     重新设置基础点
git merge 名称                           将分支合并到head指向的分支
git push origin localbranch              将代码推送到远程仓库的指定分支
git push -d origin branchName            删除远程分支
git stash                                暂存代码
git stash pop                            弹出暂存代码

创建新的项目

在Gitlab上创建项目

登录Gitlab账号,点击New Project按钮创建新的项目。填写项目名称、项目描述,选择项目访问权限。公司的项目一般选择Internal,意为需要登录才能访问项目,公司外部人员没有访问权限。填写完毕后点击Create Project。

将项目clone到本地,并初始化项目代码

git clone http://xxxxx.git
cd gitlab-usage-demo
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

开发新的功能

创建新分支,并完成功能的开发

Git项目创建的时候,默认分支为master分支。在开发的过程中,尽量不要在主分支上直接进行开发,最好创建新的分支,在开发分支上创建新的功能,经过测试后合并入master分支。

创建新的分支

git branch dev   # 创建名为dev的分支
git checkout dev  # 将当前项目切换到该分支

按照项目需求编写项目代码,此处新建一个main.py 文件,添加helloworld代码

vim main.py

添加以下内容

print("Hello world!")

此时查看项目状态

$ git status
位于分支 dev
未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

    main.py

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

将修改的文件提交

git add .  # 将所有的修改添加
git commit -m "添加了hello world功能"

多次修改可以提交多次内容,直到当前功能开发完成并完成测试。

将当前功能合并到master分支

完成一个功能的开发并测试通过之后,相应的代码就可以合并到master分支当中了

git checkout master  # 切换到master分支
git merge dev  # 合并dev分支的代码

提交到远程仓库

git push origin master

此时,可以在gitlab上查看到我们的提交结果,如果dev分支已经合并,这是我们可以删除该分支

git branch -d dev

项目上线

使用tag标签对重要版本进行标记

当根据项目设计完成所有功能之后,项目就可以进行线上部署了。为了保留线上项目的历史版本,便于回滚到历史上任意一个上线版本,对于每次进行线上部署,需要使用tag进行管理。需要回滚到某个历史版本时,切换到对应的tag就可以了。tag不同于分支,而是相当于一个个里程碑,对每个重要的上线版本进行标记。

创建tag,-a指定标签名,-m是提交信息

git tag -a v1.0 -m "第一个上线版本"

查看某个tag的信息

git show v1.0

需要回滚时,就可以切换到这个tag

git checkout v1.0

将tag提交到远程仓库

git push origin v1.0

对历史版本进行bug修复

我们总是在master分支上开发合并新的功能,对于上线历史版本发现的bug我们需要进行修复,这显然不能再master分支上进行,因为线上版本总是滞后于master分支,我们最好是从我们标记的tag处创建新的分支,进行bug修复,修复完成上线后对修复完成的版本打上新的标签。这里我们在示例项目上进行演示。

此时我们查看项目的当前状态

# hanbing @ shuding1 in ~/MyProject/gitlab-usage-demo on git:master o [11:13:20] C:1
$ git branch       
* master

# hanbing @ shuding1 in ~/MyProject/gitlab-usage-demo on git:master o [11:13:43] 
$ git tag     
v1.0

我们当前有master分支,由于此版本已经上线,我们打上了v1.0标签,表示这是我们上线的第一个版本。由于新的需求,我们需要在master分支上开发2.0版本,为了演示我们在master分支上提交一些新的代码

echo "print("Hello world! My name is hanbing.")" >> main.py
git add main.py
git commit -m "添加了自我介绍的功能"
git push origin master

上线几天后,运维人员发现了v1.0版本的一些bug,提交给开发人员进行修复,此时我们可以从v1.0处创建一个分支,在此分支上进行bug修复。

git checkout v1.0  # 切换到v1.0
git branch fix_bug_v1.0  # 从v1.0处创建分支 
git checkout fix_bug_v1.0  # 切换到创建的分支

在新创建的fix_bug_v1.0处添加代码

echo "print("Fix a bug of v1.0.")" >> main.py
git add main.py
git commit -m "修复了v1.0的一个bug"

此时查看我们的main.py,应该有以下内容

print("Hello world!")
print("Fix a bug of v1.0.")

进行测试上线过后,我们可以在此打上一个新的标签,v1.1

git tag -a v1.1 -m "第一个上线版本(修复了一个bug)"
 git push origin v1.1
 git checkout master # 切换回master分支上

这样我们既可以及时修复bug又不影响新功能在master分支上的开发。

对历史版本的修改合并到master分支

此时我们已经及时修复了线上版本的bug,master分支上可能也会存在相同的bug,我们需要把刚才的修改合并到master中。此时我们可以在master分支上创建新的分支merge_bug_fix,将刚刚的bug修复代码合并,测试后再讲合并后的代码合并到master分支。

git branch merge_bug_fix  # 从v1.0处创建分支 
git checkout merge_bug_fix  # 切换到创建的分支

合并刚刚的bug修复的代码

git merge v1.1            
自动合并 main.py
冲突(内容):合并冲突于 main.py
自动合并失败,修正冲突然后提交修正的结果。

这里会提示合并失败,因为在master分支和v1.1第二行我们添加了不同的代码,这时,main.py文件中会显示冲突的位置,我们选择需要保留的代码。这里我们选择两者都保留

print("Hello world!")
<<<<<<< HEAD
print("Hello world! My name is hanbing.")
=======
print("Fix a bug of v1.0.")
>>>>>>> v1.1

修改过后,我们的main.py文件如下

print("Hello world!")
print("Hello world! My name is hanbing.")
print("Fix a bug of v1.0.")

我们将上面的修改提交

git add main.py
git commit -m "将v1版本的bug修复代码合并到了master"

两者合并之后, merge_bug_fix分支便成为了master和V1.1的共同上游分支,这是我们可以切换到master分支,将 merge_bug_fix分支的修改合并

$git checkout master

$git merge  merge_bug_fix   
更新 987e446..4499939
Fast-forward
 main.py | 1 +
 1 file changed, 1 insertion(+)

显示合并成功,至此,我们已将历史版本中需要保留的修改合并到了主分支上面。

标签:git,14,--,v1.0,master,main,bug,分支
From: https://www.cnblogs.com/peace0218/p/17077585.html

相关文章

  • 微信小程序防抖
    微信小程序闭包-防抖这里主要用到闭包,将函数内的值保存下来,下次点击的时候进入判断,如果定时器启动了,则清除定时器,直到最后一次启动定时器,也就是说,在规定的时间内只会触发......
  • 微信小程序wx.navigateTo跳转参数大小超出限制问题
    微信小程序的跳转方式wx.navigateTo(Object):保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页(新页面入栈)wx.redirectTo(Object):关闭当前页面,跳......
  • CF433E Tachibana Kanade's Tofu
    题意略。考虑数位dp,设$f_{i,j,k,0/1,0/1}$表示转移到第$i$位,位于AC自动机上$j$号节点,获得价值$k$,是否紧贴上边界,当且是否已经离开前导$0$的范围(可以产生新贡......
  • 混合模式Blend
    遇到的问题1) Camera直接输出画面时,混合效果和混合公式对不上底图Quad_Bg是蓝色(0,0,1,1),混合图Quad_Src是红色(1,0,0,0.5),混合模式为BlendDstColorZero,OneZ......
  • JMeter压测——从0开始创建测试计划(RT&TPS分析、常规&梯度加压线程组)
    之前做过一部分的接口性能自测,主要使用的JMeter,记录下测试计划如何创建的过程。1.插件准备安装好JMeter后,由于默认没有RT&TPS分析及梯度加压等的配置,所以需要引入插件管......
  • java多线程基础小白指南--线程的状态
    线程的状态比较混乱,网上的资料也是五花八门,这时候就要参考注意截图中的最后一句话,很多人把jvm中线程状态与实际上的os线程状态搞混了,所以才会有很多乱七八糟的状态出现。......
  • 负载均衡方案解疑
    负载均衡什么是负载均衡?负载均衡(LoadBalance)是分布式系统架构设计中必须考虑的因素之一,它通常指的是,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【......
  • 水管有时会嗡嗡响之水管共振问题 和如何排查
    “  我是4楼住户,最近用水洗澡时,水管有时会嗡嗡响,然后水压就降低了,想想也许时其他楼层用抽水泵加压,也就没在意。这几天问题越来越严重,一天响个几次。现在大过年的半夜,又响......
  • Linux网络相关命令
    1、ping命令ping命令采用的协议是ICMP协议,例如pingwww.baidu.com检测是否可以访问百度;[xuanmiao@192~]$pingwww.baidu.comPINGwww.a.shifen.com(36.152.44.95)5......
  • S2 - Lesson 27 - A wet night
    Wordstent soundlysleepsoundly,sleepdeeplysleepwell  field leap smell heavily wonderful stream campfirecampfiregocamping ......