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

概述

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

.gitignore忽略文件

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

首先导出之前Git

python 复制代码
git archive --format=zip --output=output.zip HEAD

设置全局Git账号和邮箱

arduino 复制代码
git config --global user.name "stark张宇"
git config --global user.email "15117995393@126.com"

gitignore的语法的前提

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

css 复制代码
$ 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

perl 复制代码
$ 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状态),然后再提交,需要执行以下的命令:

sql 复制代码
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

Stash 命令隐藏操作

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

bash 复制代码
$ 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查看

vbnet 复制代码
$ 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代码弹出栈。

csharp 复制代码
git stash list
stash@{0}: WIP on admin_purchase_202310: c3ce01bc Merge branch 'images_perf_202310'

Git 代码冲突

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

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

vbnet 复制代码
$ 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。

sql 复制代码
git merge --squash

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

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

相关推荐
研究是为了理解4 小时前
Git Bash 常用命令
git·elasticsearch·bash
DKPT5 小时前
Git 的基本概念和使用方式
git
Winston Wood8 小时前
一文了解git TAG
git·版本控制
喵喵先森8 小时前
Git 的基本概念和使用方式
git·源代码管理
xianwu54310 小时前
反向代理模块
linux·开发语言·网络·git
binishuaio12 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
会发光的猪。13 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
stewie614 小时前
在IDEA中使用Git
java·git
晓理紫1 天前
使用git lfs向huggingface提交较大的数据或者权重
git
我不是程序猿儿1 天前
【GIT】sourceTree的“当前分支“,“合并分支“与“检出分支的区别
git