git用法总结
本文最后更新于:2021年11月1日 下午
为了防止代码越改越凉,一定要选择一款代码版本控制工具,目前用的人数最多的就是git了,我把使用过程中遇到的问题,和自己常用的命令在此总结一下。
写在前面
本身git的官方网站就有很详细的教程点击进入,而且还是中文的,所以我建议直接把官方的教程看一遍就可以了,如果是初学者的话,只需要认真的把前两章看完就完全够用了,第三章大概看一下,如果不理解以后慢慢消化。
git命令
配置文件解释
如果命令是git config
说明是修改配置文件用的,后面如果加上了--global
说明修改的是全局的配置文件,对所有的本地仓库生效,如果不加,则修改的是当前项目的config文件。
- 全局配置文件默认在用户目录下,文件名是
.gitconfig
- 项目配置文件则在项目对应.git目录中
经常使用的命令
1 |
|
不是很常用的命令
1 |
|
提高git clone的速度
使用ssh地址
克隆项目的时候选择ssh的地址,https和ssh的速度差距超级大,优先推荐
添加代理
因为git clone项目的话,一般克隆的是GitHub上的项目,然而GitHub的服务器在国外,所以速度你懂的。
如果受不了这个速度的话,可以自己搭建或者找一个代理,然后用代理来克隆项目,这个时候速度就飞起了。
下面的代码只有代理能用的时候才可以使用,要不就无法上网了。如果不需要使用了,或者不小心输入错误了,可以打开全局配置文件,把里面的这几行代码删除即可。
注意看代理后的端口是啥,我这里是1080
1 |
|
一些问题
Git修改区分目录大小写
通过代码规范,修改了包名为全小写(修改了文件夹目录),但发现push后,git服务器的文件夹目录还是为大写
解决方法:
git默认是不区分大小写的,意思是你修改一个文件名/文件夹的时候,git status 是不会提示你有修改的
可以通过git config --get core.ignorecase
查看默认配置
通过git config core.ignorecase false
设置为区分大小写
然后git status
就可以看到变动
然后push到远程服务器
Git 工具 - 打包
这些情况下 git bundle
就会很有用。 bundle 命令会将 git push
命令所传输的所有内容打包成一个二进制文件, 你可以将这个文件通过邮件或者U盘传给其他人,然后解压到其他的仓库中。
1 |
|
Git 笔记:将两个提交合并为一个
命令行输入:
git rebase -i HEAD~2
(i的意思是:interactive,HEAD~2为在历史的前两个提交)将第二行的pick改成s, 也就是squash(挤压合并),作用是:使用提交,将此提交与之前的提交合并。 然后保存文件退出vim。
提交你的代码,git commit -a, vim出现如下所以文件信息:注意看:第4行和第8行分别对应这你第一次和第二次的提交描述信息,这时你就要将这两条描述信息合并为一条。
将之前的两条提交描述信息,修改合并为一条,然后保存退出vim,如下所示:
保存退出后,push代码:
git push origin master -f
(注意:因为时rebase操作,所以要加-f, 强制push), 推送完成, 如下所以,完成将两个提交合并为一个。
https://blog.csdn.net/jerechen/article/details/89556281
给git瘦身
https://linux.cn/article-8556-1.html
push时报错
git提交本地代码到远程仓库之前没有pull导致push失败解决办法
git push错误failed to push some refs to的解决
当我们在github版本库中发现一个问题后,你在github上对它进行了在线的修改;或者你直接在github上的某个库中添加readme文件或者其他什么文件,但是没有对本地库进行同步。这个时候当你再次有commit想要从本地库提交到远程的github库中时就会出现push失败的问题。
如下图所示
我在github库中对某个文件进行了在线的编辑,并且没有同步到本地库,之后我在本地库添加了文件test.txt,并想提交到github,出现以下错误:error:failed to push some refs to。
解决方案
这个问题是因为远程库与本地库不一致造成的,那么我们把远程库同步到本地库就可以了。
使用指令git pull --rebase origin master
这条指令的意思是把远程库中的更新合并到本地库中,–rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。
具体细节可以点击查看
清理垃圾
参考GitHub官网: https://help.github.com/articles/removing-sensitive-data-from-a-repository
例如, 我的jekyll博客代码库提交了大量mp3文件, 使用下面命令清除后代码库由233M缩小为1.3M, 提交到GitHub部署博客轻快飞速
清除垃圾文件(大量无用的mp3文件)
1 |
|
提交到远程仓库(如GitHub, 我再次从git clone GitHub代码库会变小为1.3M)
1 |
|
必须回收垃圾,本地仓库才变小
1 |
|
Git仓库下子模块仓库简单操作
新建一个仓库
1 |
|
添加子仓库
git submodule add url
把url替换成你想添加的子仓库;执行成功后,可以在demo1文件夹下看到.gitsubmodule文件
推送到远程仓库
在推送到远程仓库前,我们还要给本地仓库添加一个远程仓库地址,可以到git.oschina 或github上创建
1 |
|
子仓库的常用操作
克隆带子仓库的仓库
1 |
|
克隆主仓库后,子仓库是没有代码的,所以继续
初始化子仓库
git submodule init
有子仓库的文件夹了,但是没有代码
克隆子仓库代码。
git submodule update
此时可以看到在下载子仓库代码了