主要是记录一下,防止自己遗忘。
仅是在使用过程中遇到的问题做作记录和整理,所有相关操作来源于网络以及自己实测
Github 上传仓库如下,同样适用于gitee
一、【如果有需要】Git 忽略文件提交及方法
1、在Git项目中定义 .gitignore 文件
通过在项目的某个文件夹下定义 .gitignore 文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的Git提交行为。
.gitignore 文件是可以提交到公有仓库中,为该项目下所有开发者都共享一套定义好的忽略规则。
忽略优先级
.gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
从命令行中读取可用的忽略规则
当前目录定义的规则
父级目录定义的规则,依次递推
$GIT_DIR/info/exclude 文件中定义的规则
core.excludesfile中定义的全局规则
在 .gitignore 文件中,每一行的忽略规则的语法如下:
空格不匹配任意文件,可作为分隔符,可用反斜杠转义
# 开头的文件标识注释,可以使用反斜杠进行转义
! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
/ 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
/ 开始的模式匹配项目跟目录
如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
** 匹配多级目录,可在开始,中间,结束
? 通用匹配单个字符
[] 通用匹配单个字符列表
常用匹配示例:
bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
2.git init
3.git add
git add 文件名 将工作区的某个文件添加到暂存区
git add . 将当前工作区的所有文件都加入暂存区
git add -u 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件
git add -A 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件
git add -i 进入交互界面模式,按需添加文件到缓存区
4.git status 查看以下添加了追踪的文件--确认 .gitignore 生效
5.git commit -m "first commit"
6.git remote add origin https://github.com/gxpooo/ikrvWindal.git
7.推送
git push -u origin main
Gitee的话先配置好全局 用户相关信息即可。
git push -f origin main
*注意此处 是 -f 强推,github 之后出现 登入连接授权 采用 with a code 之后,点界面下方的github 链接 将设备验证码加入 即可
二、后期 push
git status
git add .
git commit -m "...."
git push
或者对齐推送
git push -u origin main
三、维护中需要用到的
1.删除某个文件的历史记录,有时你可能需要从Git历史记录中删除某个文件的所有历史记录。
git filter-branch --tree-filter 'rm -rf path/to/file' -- --all
其中path/to/file是你想要删除历史记录的文件的路径。(如果文件名有空格,则需要用双引号引起来)
此命令将复制每个提交,并在每个提交上运行给定的命令。在这种情况下,给定的命令是删除指定的文件。
请注意,这个操作可能会非常耗时,因为它需要重新写入整个Git历史。在操作之前,请确保备份所有数据并仔细阅读文档。
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all
其中, path-to-your-remove-file 就是你要删除的文件的相对路径(相对于git仓库的跟目录), 替换成你要删除的文件即可.
注意:这里的文件或文件夹,都不能以 ‘/’ 开头,否则文件或文件夹会被认为是从 git 的安装目录开始。
如果你要删除的目标不是文件,而是文件夹,那么请在 git rm --cached' 命令后面添加 -r 命令,表示递归的删除(子)文件夹和文件夹下的文件,类似于 rm -rf` 命令。
文件夹实列如下://文件路径注意 '/' 方向
git filter-branch --force --index-filter 'git rm -rf --cached -r --ignore-unmatch rxsFixdev/.vs' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm -rf --cached -r --ignore-unmatch build-AoiTester-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm -rf --cached -r --ignore-unmatch build-AoiTester-Desktop_Qt_5_15_2_MSVC2019_32bit-Release' --prune-empty --tag-name-filter cat -- --all
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch rxsFixdev/Debug/*.idb' --prune-empty --tag-name-filter cat -- --all
*需要注意 .gitingore 文件中的路径或文件
2. 清理和回收空间
虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间.
下面将这个文件还在你的本地仓库里,还需要将它完全抹除:实测实列如下
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
3 .推送我们修改后的repo
强制推到远端所有分支: ## 以强制覆盖的方式推送你的repo, 命令如下:
git push origin master --force
git push origin master --force --all
## 这个过程其实是重新上传我们的repo, 比较耗时, 虽然跟删掉重新建一个repo有些类似, 但是好处是保留了原有的更新记录, 所以还是有些不同的.
如果你实在不在意这些更新记录, 也可以删掉重建, 两者也差不太多, 也许后者还更直观些.
为了能从打了 tag 的版本中也删除你所指定的文件或文件夹,您可以使用这样的命令来强制推送您的 Git tags:
git push origin master --force --tags
4.也可以通过GITEE 操作 在登入Gitee 进行如下操作
【仓库设置】->【功能设置】
存储库 GC 清理
存储库 GC 用于清理悬空文件,压缩存储库对象,减少存储库磁盘占用。
git verify-pack 命令查看 pack 文件包的相关详细信息,通过文件大小进行排序,这里只列出5个最大的文件。
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
git rev-list 列出该对象文件名等更多信息
git rev-list --objects --all | grep 777e8697e5dc1017ca901c8cf226d707b6e96b06
===》得到命令输出:777e8697e5dc1017ca901c8cf226d707b6e96b06 go.sum
删除对应文件即可
git filter-branch --index-filter 'git rm --cached --ignore-unmatch go.sum' -- --all
历史记录中已经没有该文件了。不过运行 filter-branch 产生的日志还是会对该文件有引用,所以还需要运行以下几条命令,把该文件的引用完全删除:
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
git prune文章来源:https://www.toymoban.com/news/detail-758871.html
强制 push
git push --force文章来源地址https://www.toymoban.com/news/detail-758871.html
到了这里,关于Git使用杂记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!