E:\Dev>git --version git version 2.36.1.windows.1
TODO:有很多内容待整理,趁现在熟悉及时整理了
VS Code侧边栏自带git(可视化操作)功能,也支持查看diff,已经很足够用了,推荐
Github是一个存放 Git Repo 的网站
Git Repository表现为一个文件夹
Git是一个版本管理工具,除了GitHub还有其他网站如GitLab等支持Git
Git报错:Unable to create 'XXX/.git/index.lock': File exists.
解决方法:去工程的.git文件夹,删除index.lock文件
有冲突的时候怎么取消合并的步骤 master是一个特殊分支吗?从功能性上来说,有主分支这种概念吗? 很久没有pull/push,积累了很多commit,冲突很多,那要一次性解决完吗? 40位的ID和8位的ID,什么关系?8位ID是前缀啊! push和pull就是同步而已 push之前先pull,谁要合并谁就解决冲突 add 之后就是 index index就是staging area(staged area) HAED就是Repo,为什么?!因为Repo不需要存储Working Dir和Index,只需要HEAD的部分 本地的HEAD就是Remote HEAD的同步版本 release issue 是git的功能吗,还是只是Github的功能? git怎么不拉所有的分支/所有的commit记录?
git checkout HEAD~1 其中HEAD~1表示HEAD前的1个Commit
待整理:
对于非文本文件,Git检测冲突的最小单位是文件,对于文本文件,Git检测冲突的最小单位是行。
问题:二进制文件和文本文件是如何区分的?
猜测:实际上两种类型的文件都是存储为二进制,但是文本文件符合一定的编码规则,比如按照特定的解码规则,解码的时候不会出现错误,普通的二进制文件肯定是不可以的,应该就是按照这样的方式进行区分文本文件和二进制文件的吧。
修复冲突可以直接选择使用冲突两方的某一方的版本覆盖冲突的部分。
Branch
Tag
Github使用token认证,可以为不同的Repo设置不同的token,但是这样Repo A的token保留在电脑上,再push Repo B的时候就会认证失败,还挺不方便的,我并没有找到能用的清除本地token记录的方式,只能用下面的方式代替:
# 在无法推送的Repo中: # 查看remote地址 > git remote -v origin https://github.com/GZhonghui/xxx.git (fetch) origin https://github.com/GZhonghui/xxx.git (push) # 修改remote地址,顺便把正确的token填入 git remote set-url origin https://github_username:token_of_this_repo@github.com/GZhonghui/xxx.git # 然后就可以push啦
Submodule,子模块将整个工程分割开来,子模块也就是依赖,但是不用将依赖的代码添加到自己的工程中来,而且一般是依赖别人的库,使用Git的子模块可以很方便的将别人的库添加到自己的库中,依赖的模块也可以很方便地更新。
Git LFS,大坑
使用Git上传大文件的时候很可能遇到LFS的错误。先不说LFS能不能用,就算能用,它的性能也绝对不够,直接禁用就好,使用以下命令移除Git LFS:
git lfs uninstall
[AI]Bitbucket 是 Atlassian 公司推出的一個 Git 代碼託管與協作平台,主要用於軟體開發團隊進行程式碼版本控制、協作開發與專案管理,它和 GitHub、GitLab 類似。
git的工作原理
Git 把所有数据(包括文件内容、目录结构、提交记录等)都存储为对象,对象主要有以下四种类型:
简单来说就是上面四种对象,都有自己的hash id(最常见的就是commit id了)
使用cat-file可以查看一个id对应的内容
anny@annys-MacBook-Air trial % git log
commit d5845d878949af658efeaaf710a458c9c3e3c3ae (HEAD -> master)
Author: GZhonghui <mail@gzher.com>
Date: Tue Jul 8 11:36:35 2025 +0900
1st commit
anny@annys-MacBook-Air trial % git cat-file -p d5845d878949af658efeaaf710a458c9c3e3c3ae
tree 56dd4326f33de0b7575658c179df3967840dde90
author GZhonghui <mail@gzher.com> 1751942195 +0900
committer GZhonghui <mail@gzher.com> 1751942195 +0900
1st commit
anny@annys-MacBook-Air trial % git cat-file -p 56dd4326f33de0b7575658c179df3967840dde90
100644 blob ce013625030ba8dba906f756967f9e9ca394464a README
100644 blob b80e3222ab264bd7cafb376749bd18814fd66776 main.py
顺便说一句:
git add / git commit等,这种叫作git的高级命令,用这些命令就足够我们工作了
但是如果想要看到git的工作过程,可以使用git的底层命令,上面我们用到的git cat-file就是一个底层命令。
mustang[46]% git log temporary file: Permission denied # 方法1:确认系统的临时文件的路径($TMPDIR or /tmp)的权限 # 方法2:使用--no-pager (git --no-pager log),禁用分页器,这样log就不会尝试写入硬盘了
fatal: detected dubious ownership in repository at '/export/www/htdocs'
To add an exception for this directory, call:
git config --global --add safe.directory /export/www/htdocs
# 按照提示执行命令即可
# 如果包含类似 "^[[33m" 的字符,说明当前环境不支持显示颜色 # 使用此参数关闭 git 的颜色渲染 --no-color git show --no-color ac23ebd6a15ea96929553f037fe523d940cfdec0 # 其他的可能是编码问题