Git使用规范及命令

文章目录

    • 一、Git工作流
    • 二、分支管理
    • 三、Git命令操作规范
        • 1. 切到develop分支,更新develop最新代码
        • 2. 新建feature分支,开发新功能
        • 3. 完成feature分支,合并到develop分支
        • 4. 当某个版本所有的 feature 分支均合并到 develop 分支,就可以切出 release 分支,准备发布新版本,提交测试并进行 bug fix
        • 5. 所有 bug 修复完成,准备发布新版本
        • 6. 线上出现 bug,需要紧急发布修复版本
        • 7. 分支间操作注意事项
    • 四、git常用命令
      • 拉取
      • 增删文件
      • 提交
      • 暂存代码
      • 撤销
      • 分支
      • 修改查询与提交日志

一、Git工作流

在这里插入图片描述

  1. 工作区(Workspace)是电脑中实际的目录。
  2. 暂存区(Index)类似于缓存区域,临时保存你的改动。
  3. 仓库区(Repository),分为本地仓库和远程仓库。

通常提交代码分为几步:

  1. git add从工作区提交到暂存区
  2. git commit从暂存区提交到本地仓库
  3. git push从本地仓库提交到远程仓库

二、分支管理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三、Git命令操作规范

1. 切到develop分支,更新develop最新代码
git checkout develop
git pull --rebase

rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易;用merge的git路线是跳跃的,可以明确的知道是从哪个分支或节点修改的。

当合并代码有冲突时,需要手动修改冲突内容后,add,commit, push. 而rebase 操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后, 再执行 git rebase –continue 继续操作,再push。

2. 新建feature分支,开发新功能
git checkout -b feature/xxx
...
git add <files>
# commit提交时,不能使用 -m 参数,这里只做示例
git commit -m "feat(xxx): commit a"
git commit -m "feat(xxx): commit b"
# 其他提交
...# 如果此时 develop 分支有一笔提交,影响到你的 feature 开发,可以 rebase develop 分支,前提是 该 feature 分支只有你自己一个在开发,如果多人都在该分支,需要进行协调# 切换到 develop 分支并更新 develop 分支代码
git checkout develop
git pull --rebase# 切回 feature 分支
git checkout feature/xxx
git rebase develop# 如果需要提交到远端,且之前已经提交到远端,此时需要强推(强推需慎重!)
git push --force
3. 完成feature分支,合并到develop分支
# 切到 develop 分支,更新下代码
git checkout develop
git pull --rebase# 合并 feature 分支 不快进合并
git merge feature/xxx --no-ff # 删除 feature 分支
git branch -d feature/xxx# 推到远端
git push origin develop
4. 当某个版本所有的 feature 分支均合并到 develop 分支,就可以切出 release 分支,准备发布新版本,提交测试并进行 bug fix
# 当前在 develop 分支
git checkout -b release/xxx# 在 release/xxx 分支进行 bug fix
git commit -m "fix(xxx): xxxxx"
...
5. 所有 bug 修复完成,准备发布新版本
# master 分支合并 release 分支并添加 tag
git checkout master
git merge --no-ff release/xxx 
# 添加版本标记,这里可以使用版本发布日期或者具体的版本号
git tag 1.0.0# develop 分支合并 release 分支
git checkout develop
git merge --no-ff release/xxx# 删除 release 分支
git branch -d release/xxx
6. 线上出现 bug,需要紧急发布修复版本
# 当前在 master 分支
git checkout master# 切出 hotfix 分支
git checkout -b hotfix/xxx... 进行 bug fix 提交# master 分支合并 hotfix 分支并添加 tag(紧急版本)
git checkout master
git merge --no-ff hotfix/xxx 
# 添加版本标记,这里可以使用版本发布日期或者具体的版本号
git tag 1.0.1# develop 分支合并 hotfix 分支(如果此时存在 release 分支的话,应当合并到 release 分支)
git checkout develop
git merge --no-ff hotfix/xxx# 删除 hotfix 分支
git branch -d hotfix/xxx
7. 分支间操作注意事项
  • 同一分支 git pull 使用 rebase
  • 分支合并使用 --no-ff

四、git常用命令

拉取

# 下载远程仓库的所有变动 
$ git fetch [remote]
# 显示所有远程仓库 
$ git remote -v
# 显示某个远程仓库的信息 
$ git remote show [remote]
# 增加一个新的远程仓库,并命名 
$ git remote add [remote-name] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 取回远程仓库的变化,并与本地分支变基合并
$ git pull --rebase [remote] [branch]

增删文件

#添加当前目录的所有文件到暂存区
$ git add .
#添加指定文件到暂存区
$ git add <file1> <file2> ...
#添加指定目录到暂存区,包括其子目录
$ git add <dir>
#删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
#停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
#改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

提交

# 提交暂存区到仓库区
$ git commit -m [message]
# 提交工作区与暂存区的变化直接到仓库区
$ git commit -a
# 提交时显示所有 diff 信息
$ git commit -v
# 提交暂存区修改到仓库区,合并到上次修改,并修改上次的提交信息
$ git commit --amend -m [message]
# 上传本地指定分支到远程仓库
$ git push [remote] [remote-branch]

暂存代码

暂存就是把你当前的所有修改(不包括新增文件)保存到你本地仓库的一个临时暂存区。保存后则可以执行git pull拉取远程代码到本地,再把暂存区的修改释放出来。这样我们就可以保证在提交到本地之前就可以把这些远程和本地的提交都处理干净。

# 将未提交的变化放在储藏区
$ git stash
# 将储藏区的内容恢复到当前工作区
$ git stash pop
常用git stash命令:
# 执行存储时,添加备注
git stash save "save message" 
#查看stash了哪些存储
git stash list  
#显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num}
git stash show 
#应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储
git stash apply 
git stash apply stash@{$num}
#恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下
git stash pop 
git stash pop stash@{$num} 
#丢弃stash@{$num}存储,从列表中删除这个存储
git stash drop stash@{$num} 
#删除所有缓存的stash
git stash clear 

撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复暂存区当前目录的所有文件到工作区
$ git checkout .
# 恢复工作区到指定 commit
$ git checkout [commit]
# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次 commit 保持一致
$ git reset --hard
# 重置当前分支的指针为指定 commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 一致
$ git reset --hard [commit]
# 新建一个 commit,用于撤销指定 commit
$ git revert [commit]

分支

#列出所有本地分支
$ git branch
#列出所有本地分支和远程分支
$ git branch -a
#新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
#新建一个分支,并切换到该分支
$ git checkout -b [new_branch] [remote-branch]
切换到指定分支,并更新工作区
$ git switch [branch-name]
#合并指定分支到当前分支
$ git merge [branch]
#选择一个 commit,合并进当前分支
$ git cherry-pick [commit]
#删除本地分支,-D 参数强制删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin -D 分支名

修改查询与提交日志

# 查看工作区文件修改状态
$ git status               
# 查看工作区文件修改具体内容   
$ git diff [file]
# 查看暂存区文件修改内容
$ git diff --cached [file] 
# 查看版本库修改记录
$ git log                  
# 查看某人提交记录
$ git log --author=someone
# 查看某个文件的历史具体修改内容
$ git log -p [file]        
# 查看某次提交具体修改内容
$ git show [commit]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

领域建模(系统操作复习)

习题 问题 考察点 领域建模 识别概念类 固定模板 Conceptual Class Category Examples specifications,designs, or descriptions of things roles of people containers of other things things in a container abstract noun concepts organizations events processes (…

【代码随想录算法训练Day24】LeetCode 77.组合

Day24 回溯 回溯算法的模板&#xff1a; 回溯函数模板返回值以及参数回溯函数终止条件回溯搜索的遍历过程 LeetCode 77.组合 回溯的经典问题&#xff0c;在每个路径数组中存入下一个数&#xff0c;再接着递归处理路径中的下一个数。 class Solution { public:vector<ve…

vs2022 MSVC2017_64 调试Qt5.14.2源码

pdb调试文件下载路径https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5142/qt.qt5.5142.debug_info.win64_msvc2017_64/ 在vs中添加pdb文件符号路径&#xff0c;使其qt在调试时能查找到相应的符号文件。 在需要调试的解决方案下通过解决方案点击&…

【Linux】日志管理

一、日志进程 1、处理日志的进程 rsyslogd&#xff1a;系统专职日志程序 观察rsyslogd程序&#xff1a; ps aux | grep rsyslogd 2、常见的日志文件 1、系统主日志文件: /var/log/messages 动态查看日志文件尾部&#xff1a; tail -f /var/log/messages 2、安全…

背包问题汇总(01背包、完全背包、多重背包、分组背包)

背包问题 01 背包完全背包多重背包分组背包 01 背包 有 n 件物品&#xff0c;每个物品只能使用一次&#xff0c;在不超过背包体积的情况下&#xff0c;总价值最大是多少&#xff1f; #include <iostream> using namespace std; const int N 1010; int n, m; int v[N],…

C语言-01_HelloWord

文章目录 1.C程序运行机制2.HelloWorld的剖析① main()② 函数体③ printf()④ 标准库、头文件 3.输出3.1 printf()标准格式3.2 占位符3.3 输出格式 1.C程序运行机制 过程1&#xff1a;编辑 编写C语言源程序代码&#xff0c;并已文件的形式存储到磁盘中。源程序文件以“.c”作…

Java复数计算

复数在数学、科学或者工程领域是很常用的&#xff0c;可以通过调用Apache Commons Math库来完成&#xff0c;也可以自己手撸。 一、使用Apache Commons Math库 这个库有多个版本&#xff0c;在写这篇文章时&#xff0c;它的最新版是2022年12月19日的4.0-beta1&#xff0c;构建…

k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition 当你创建新的 CustomResourceDefinition&#xff08;CRD&#xff09;时&#xff0c;Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的&#xff0c;也可以是集群作用域的…

并发——线程

为了并发的执行任务(程序)&#xff0c;现代操作系统特地引入了“进程”的概念 分析&#xff1a; 1. 进程的地址空间是独立的&#xff0c;进程间通信的代价比较大 如果进程需要进行数据的交换&#xff0c;则需要用到进程间通信(pipe / fifo / shm / msg / .…

VHDL/CPLD硬件描述语言:2022年做的万年历实验

之前接触过一些硬件描述语言以及VHDL/CPLD的单片机的设计实验&#xff0c;那时是2022年了 这里补写一篇笔记,以记录一下那十多个小时 万年历实验 研究中的心得体会&#xff1a; 说明解释都是个人理解&#xff0c;与标准描述有较大出入...... 目录 输入输出器件的编写: 分频器…

HTML5 Web Workers 详解 (2)

三、高级使用 1. 多个 Web Workers 你可以在主线程中创建多个 Web Workers 来处理并行任务。例如&#xff0c;下面的代码创建了两个 Worker 并分别处理不同的任务。 主线程代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"…

8086 汇编笔记(五):包含多个段的程序

一、在代码段中使用数据 “dw”的含义是定义字型数据 dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h code segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hmov bx,0mov ax,0mov cx&#xff0c;8s: add ax cs:[bx]add bx,2loop smov ax,4c00hint 21hcode…

MVC前端定义变量的艺术:深入解析与实战策略

MVC前端定义变量的艺术&#xff1a;深入解析与实战策略 在MVC&#xff08;Model-View-Controller&#xff09;架构中&#xff0c;前端定义变量是一个至关重要的环节。它涉及到数据的存储、传递和展示&#xff0c;直接影响着应用程序的性能和用户体验。本文将从四个方面、五个方…

HBase 常用 shell 操作

下面给大家介绍一些HBase 常用 shell 操作&#xff0c;各位看官看好了啦&#xff0c;我要献丑了。 进入 HBase 客户端命令操作界面 $ bin/hbase shell查看帮助命令 > help查看当前数据库中有哪些表 > list创建一张表 创建 user 表&#xff0c;包含 info、data 两个列…

【Keil 5】Keil 5下载安装激活到2032年(含MDK、C51、STM32单片机)+附带百度网盘链接

这里写目录标题 安装包、激活文件下载1.双击mdk 514开始安装2.一路点next&#xff0c;信息随便写即可3.激活4.安装STM325.激活c51 安装包、激活文件下载 解压密码&#xff1a;lantongxue 链接&#xff1a;https://pan.baidu.com/s/15Aukt0j1HCFyHBE6whuDeg?pwdsjyh 提取码&…

Streamsets-JDBC模式使用更新时间字段数据同步

StreamSets的开源地址&#xff1a;https://github.com/streamsets/datacollector-oss Streamsets官网地址&#xff1a;https://streamsets.com/ Streamsets文档地址&#xff1a;https://docs.streamsets.com/portal/datacollector/3.16.x/help/index.html 我又来写Streamsets了…

LangChain实战技巧之四:当模型(Model)不支持Tool/Function的解决办法

文心大模型两大主力模型已全面免费&#xff0c;可参考我之前发的文章 AI菜鸟向前飞 — 今日三则AI相关新闻 但是&#xff0c;这些模型原生并不支持Tool/Function Call 如下所示&#xff1a; tool def greeting(name: str):向朋友致欢迎语return f"你好啊, {name}"…

基于LabVIEW虚拟示波器设计

随着计算机技术的发展&#xff0c;传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展&#xff0c;标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器&#xff0c;就是在通用的计算机平台上定义和设计…

ROS2自定义服务接口

ROS2自定义服务接口 在src/village_interface 下构建srv文件夹 src/village_interface/srv 下新建一个BorrowMoney.srv 遵循大小写编程规范 # 客户端请求 string name uint32 money # 中间这三个横杠很重要 不能删掉 --- # 服务端响应 bool success uint32 money接口编译 修改…

TDR原理的介绍

目录 简介 简单定义 TDR测试原理 简介 时域和频域就像孪生兄弟一样&#xff0c;经常在测试测量领域同时出现&#xff0c;可谓是工程师们分析问题和解决问题的两大法宝。所以&#xff0c;在某些测试场景中&#xff0c;如果有时域信息的护法&#xff0c;咱们就能从时频域两个维…