【Git】基础命令
基础结构
文件状态
Changes to be committed
文件已经被
git add <file>
存放在暂存区,现在有两条路可以走- 提交:使用
git commit -m ""
提交 - 恢复:使用
git restore --staged <file>
或git reset <file>
将文件复原到工作区,文件修改的内容会保留
- 提交:使用
Changes not staged for commit
文件被修改,但是还为被
git add <file>
- 提交到暂存区:使用
git add <file>
- 恢复:使用
git restore <file>
或git checkout <file>
将文件的内容恢复成上一次提交的内容
- 提交到暂存区:使用
Untracked files
新建的文件,还未被跟踪。这种状态的文件可以使用
.gitignore
文件取消跟踪- 使用
git add <file>
跟踪文件 - 使用
.gitignore
屏蔽文件 - 直接删除文件
- 使用
Git远程命令
基础命令
1 | // 查看绑定了哪些远程仓库 |
推送
1 | 将本地的<branch_name>分支推送到远程的<branch_name>分支上 |
还可以添加-u
参数设置默认的推送和拉取映射关系
使用这个参数之后可以直接使用git push
和git pull
而不用再添加参数
1 | 将本地的master分支推送到origin的master分支上,并设置这个为默认的推送和拉取映射 |
注意:
经过测试发现携带-u
参数时使用master:main
的映射方法,后续使用git push
无法成功的将本地的master分支推送到远程的main上
也就是说,如果使用了-u
参数,那么需要推送到的远程分支名必须与本地分支名一致
拉取
将远程分支上的内容和到本地分支
有两种方法git pull
和git fetch
两者的关系是:git pull
是执行了git fetch
和git merge
两个操作
pull命令
1 | 将远程的<branch_name>分支拉取到本地的<branch_name>分支上 |
可直接使用git pull <origin_name> <branch_name>
将<origin_name>/<branch_name>
的内容直接合并到本地
fetch命令
1 | git fetch <origin_name> <branch_name> |
- 使用
git fetch <origin_name> <branch_name>
将<origin_name>/<branch_name>
的内容保存到.git/FETCH_HEAD
文件中 - 使用
git merge FETCH_HEAD
将FETCH_HEAD
中的信息合并到当前分支
将远程分支拉取到本地作为一个新的分支
git checkout -b <new_local_branch> <origin/remote_banch_name>
在本地创建一个<new_local_branch>
分支并将<origin/remote_banch_name>
一般要使用这个命令是因为遇到了冲突,详细处理方法可以查看另一篇文章【Git】合并分支及如何解决冲突
查看log
1 | 查看所有分支的提交记录之间的关系(以一行显示) |
仓库文件
获取仓库大小
1 | git count-objects -vH |
在使用这个命令之前可以先使用git gc
优化一下仓库。可以看到size-pack
参数就是仓库的大小
这个命令是获取当前仓库文件
的大小的,与你当前本地文件
的大小不一样
仓库文件
:只要上传过的文件,就会计入在里面本地文件
:使用window的资源管理器,所见即所得,没有其他的文件
一个特殊的情况是:
你不小心上传了一个1G的文件夹,现在你想要把他排除在外,使用
git rm --cached logs/
成功排除了这个文件夹,并且以后也都不会再跟踪这个文件夹了。但是你在这之前上次的1G大小的文件依然是还存在这个git仓库里的,并不会消失,使用上面的这个命令获取到的文件大小是包含这个
logs/
文件的目前没有找到彻底的删除这个1G的文件,然后你又不能回退版本的话,现在只能将你仓库根目录下的
.git
文件删除掉,再从新git init
初始化一个仓库了。当然在做这个操作之前,建议先备份一下
列出仓库所有文件
1 | git ls-files |
这个命令有很多参数,具体可以使用git ls-files --help
打开本地的帮助文档查看
1 | git ls-files -z | xargs -0 du -hc | grep total$ |
可以列出所有文件大小。
-z
:\0行终止输出,不引用文件名的输出格式,具体可看本地帮助文档-0
:防止文件中有空格-h
:以人类可读的格式显示文件和目录的大小-c
:在最后一行显示总大小,包括所有指定目录的大小total$
:正则匹配
记住账号密码
在linxu中每次都要输入账号密码,使用此命令后,push的时候再输入一次密码就不用再输入了
1 | git config --global credential.helper store |
中文为ASCII码
默认情况下git中文显示为ASCII码,使用该命令之后能正常显示中文
1 | git config --global core.quotepath false |
CRLF will be replaced by LF the next time Git touches it
这个警告提示的意思是,Git 在下次处理文件(例如提交或检出)时,会将文件中的换行符从 CRLF转换为 LF
背景
Git 对不同操作系统的换行符处理有不同的默认设置。通常,Git 会尝试在不同操作系统之间处理换行符的差异。例如:
- Windows 使用 CRLF 作为换行符。
- Unix/Linux/macOS 使用 LF 作为换行符。
解决方案
保持默认行为: 如果你不介意这种转换行为,可以忽略这个警告。Git 会在提交时自动处理换行符。
设置 Git 配置: 你可以通过全局 Git 配置或者设置
.gitattributes
文件来控制换行符的处理方式。
全局Git配置:在git shell
上执行(使用了这个就不用配置.gitattributes
文件了)
1 | git config --global core.autocrlf true # Windows 用户推荐 |
配置 .gitattributes
文件: 在仓库根目录下创建或编辑 .gitattributes
文件,添加以下规则来强制 Git 使用一致的换行符:(这个配置会覆盖全局设置)
1 | # 强制所有文本文件使用 CRLF 作为换行符 |
- 手动转换换行符: 如果你需要手动处理换行符,可以使用文本编辑器或命令行工具来转换文件的换行符。
1 | sed -i 's/\r$//' path/to/file.text |
补救措施
如果之前已经提交过文件了,可以按照以下步骤重新设置文件的换行符
配置
.gitattributes
文件1
2# 强制所有文本文件使用 LF 作为换行符
* text=auto eol=crlf删除Git缓存文件
1
git rm --cached -r .
这个命令会将所有已跟踪的文件从 Git 的暂存区中移除,但不会删除工作目录中的文件。此时,Git 会认为这些文件已被删除。
重新添加所有文件到暂存区并提交更改
1
2git add . # 此时可能依然还会报警告,但是不要紧。我们只要存储一次,修改文件在git中的规则之后,下次就不会有这个警告了
git commit -m "Normalize line endings using CRLF"此时,Git 会根据
.gitattributes
文件中指定的换行符规则重新处理这些文件,并将它们添加回暂存区。验证更改
1
git ls-files --eol
如果输出的内容是,以下内容就没问题
1
2i/lf w/crlf attr/text=auto eol=crlf .gitattributes
i/lf w/crlf attr/text=auto eol=crlf tset.texti/lf
:当前工作副本中的换行符类型因为使用的是git bash,是Unix,所以工作副本里是lfw/crlf
: Git 将在下次检出(checkout)或其他操作时将会使用的换行符类型attr/text=auto eol=crlf
:这是.gitattributes
文件中的设置
也可以将文件使用
NotePad++
或rider
等编辑器打开,查看右下角的编码格式
完全消除警告
经过测试发现,在创建Unity的C#脚本的时候.cs
文件默认是crlf
,.meta
文件使用的lf
。
所以只要你启用了Git全局配置的自动转换,或则在.gitattributes
中指定了规则,你都无法完全避免这个警告。
唯一能完全取消这个警告的方法是:不再规范所有文件的换行规则
具体的做法就是:
git config --global core.autocrlf false
:取消自动转换- 在
.gitattributes
注释掉换行规则
这样才能完全让这个警告消失在你的视野中
但正如“有得便有失”,你眼睛不会被脏了,但是代价是什么呢?
注意:
不再规范所有文件的换行规则后
- 跨平台使用仓库,会影响文件的内容,从而影响版本控制和合并
- 多人员开发时,没有规范换行规则也会影响文件内容,从而影响版本控制
所以只有在个人独自开发,且没有多平台需求的开发项目才能完全避免这个警告。
2024.10.9日更正:
可以更改unity的换行符格式
Project Setting -> Editor -> Asset Serialization -> Mode
Mixed
:混合模式Force Binary
:.meta等文件将使用CRLF
换行符格式Force Text
:meta等文件将使用LF
换行符格式