当前位置: 首页 > article >正文

Git - 导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法

概述

本次集中总结了Git4个常规操作,导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法,希望帮助到正在辛苦寻找的你。

.gitignore忽略文件

之前开发和部署服务比较仓促,所以有很多图片文件一起加载到服务中,使得仓库代码922M,所以要分离出图片和忽略部分,推送代码的时候提示Push rejected for repository size exceeds limit.,说明Git仓库需要优化了。

首先导出之前Git
git archive --format=zip --output=output.zip HEAD
设置全局Git账号和邮箱
git config --global user.name "stark张宇"
git config --global user.email "15117995393@126.com"
gitignore的语法的前提

再设置.gitignore文件中gitignore的语法是关键的一个环节,它相当于一个规定好的匹配规则,可以设置忽略和不忽略等等条件,主要的应该还是忽略的部分,需要注意的是gitignore的语法只有在git的工作区中生效。

$ ll -a | grep .git
drwxr-xr-x  14 stark  staff   448B 10 10 15:31 .git
-rw-r--r--   1 stark  staff   348B 10 10 15:30 .gitignore

或者使用git remote -v来查看git仓库的url

$ git remote -v
origin	https://gitee.com/beijing-wolf-slaying-biology/demo.git (fetch)
origin	https://gitee.com/beijing-wolf-slaying-biology/demo.git (push)
.gitignore的语法

下面是一些常见的 .gitignore 文件语法规则:

1.空行或以#开头的行将被 Git 忽略,可以用作注释。

2.星号 * 代表零个或多个任意字符。例如, *.DS_Store 会匹配所有的 .DS_Store 文件。

3.问号 ? 代表一个任意字符。例如, ?.txt 会匹配 a.txt 但不会匹配 ab.txt。

4.方括号 [] 可以匹配括号内的任一字符。例如, [abc].txt 会匹配 a.txt,b.txt 和 c.txt。

5.两个星号 ** 表示任意中间目录。例如, **/foo 会匹配 foo,a/foo,a/b/foo 等。

6.前缀 ! 表示不忽略。例如, *.txt 和 !important.txt 会忽略所有的 .txt 文件,但不会忽略 important.txt。

  1. 前缀 / 表示只忽略当前目录下的文件。例如, /.idea/ 会忽略当前目录的 /.idea/ 文件。

8.后缀 / 表示只忽略目录。例如, /runtime/* 会忽略 runtime 目录下所有的 文件。

还有一个特殊情况,我新增一个/config/忽略这个文件夹的话,本地缓存删除(改变成未track状态),然后再提交,需要执行以下的命令:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

Stash 命令隐藏操作

Stash 命令常用于某个部分功能开发到一半而不得不中途修复bug,或者紧急切换分支,或者是对当前Git分支进行隔离,Stash命令的执行原理将一个新的存根推到堆栈上,运行git stash命令。

$ git status
On branch admin_purchase_202310
	modified:   app/admin/view/purchase/purchase/index.html
	modified:   app/common/command/ScpSend.php
	modified:   public/pc/index.html

执行git stash后,当前分支就变成干净的工作区了,可以在使用git status查看

$ git stash
Saved working directory and index state WIP on admin_purchase_202310: c3ce01bc Merge branch 'images_perf_202310'

$ git status
On branch admin_purchase_202310
nothing to commit, working tree clean

可以使用git stash list的命令来查看stash栈上的代码序列,使用git stash pop代码弹出栈。

git stash list
stash@{0}: WIP on admin_purchase_202310: c3ce01bc Merge branch 'images_perf_202310'

Git 代码冲突

多人开发代码难免遇到代码冲突的问题,Git版本中非常常见的地方,有两个特别需要注意,或者说容易忽略的点。

假设待上线分支是admin_purchase_202310,要发布一个版本的功能,要合并分支main,合并的前提是更新代码,保持代码是最新的在进行操作,发版要小心操作,合并之后要记得git push推送分支。

$ git pull
Already up to date.

$ git merge admin_purchase_202310
Already up to date.

$ git push
Everything up-to-date

当发生冲突时,先使用git status查看冲突的地方,一般有<<<字符做以区分。

合并分支,显示失败,合并中灵魂的一句命令, git merge –no-ff admin_purchase_202310

–no-ff指的是强行关闭fast-forward方式。fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit。

git merge –squash

是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。

–no-ff:不使用fast-forward方式合并,保留分支的commit历史
–squash:使用squash方式合并,把多次分支commit历史压缩为一次


http://www.kler.cn/a/103667.html

相关文章:

  • 【机器学习合集】标准化与池化合集 ->(个人学习记录笔记)
  • 订水商城H5实战教程-04用户注册
  • VMwarePlayer安装Ubuntu,切换中文并安装中文输入法
  • Python基础教程:列表推导式详解
  • 【Java网络初识】 一
  • K8s 概念及组件
  • gRPC之gRPC转换HTTP
  • paddlepaddle使用实践过程中的问题记录
  • 基于大数据的社交平台数据爬虫舆情分析可视化系统 计算机竞赛
  • 软件工程与计算总结(二十三)软件工程职业基础
  • 基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现
  • WebSocket 入门案例
  • iOS 配置通用链接(Universal Link)服务端和开发者后台都配置好了,还是跳转不到App
  • 【C语言基础】函数的参数是指针
  • pynvml.nvml.NVMLError_FunctionNotFound: Function Not Found
  • Python中文分词、词频统计并制作词云图
  • Rust所有权
  • 【CSS】常见 CSS 布局
  • NFS性能瓶颈分析
  • Linux简单安装ffmpeg 实现用PHP压缩音频