git常见问题
常见问题
1.使用git提交代码,不是自己的账号
解决方法
1 | git config --global user.email your-email |
或者直接删除~/.gitconfig
2.移除文件
a.从磁盘和暂存区中同时删除
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
结果:
Changes not staged for commit:deleted: C.txt
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。
示例
- 新建文件 D.txt
echo 哈哈哈>D.txt
- 将D.txt添加到工作区
git add D.txt
- 删除文件
git rm D.txt
发生错误 :
error: the following file has changes staged in the index:
D.txt
(use --cached to keep the file, or -f to force removal)
4.使用git rm -f D.txt
进行删除
b.把文件从 Git 仓库中删除
亦即从暂存区域移除,但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪
为达到这一目的,使用 --cached 选项:$ git rm --cached README
git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:$ git rm \*~
该命令为删除以 ~ 结尾的所有文件。
3.warning: LF will be replaced by CRLF in **
原因
LF
和CRLF
其实都是换行符,但是不同的是,LF是linux和Unix系统的换行符,CRLF是window 系统的换行符。这就给跨平台的协作的项目带来了问题,保存文件到底是使用哪个标准呢? git为了解决这个问题,提供了一个”换行符自动转换
“的功能,并且这个功能是默认处于”自动模式“即开启状态的。
这个换行符自动转换
会把自动把你代码里 与你当前操作系统不相同的换行的方式 转换成当前系统的换行方式(即LF
和CRLF
之间的转换),这样一来,当你提交代码的时候,即使你没有修改过某个文件,也被git认为你修改过了,从而提示"LF will be replaced by CRLF in *****
"
解决
最简单的一种办法就是把自动转换功能
关掉即可。
输入命令 :git config core.autocrlf false
(仅对当前git仓库有效)git config --global core.autocrlf false
(全局有效)
4.Git仓库完整迁移
完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录
1 | git clone --bare 旧的git地址 |
删掉xxx.git文件夹
5.设置Git代理
设置为走代理
1 | git config --global http.proxy http://127.0.0.1:1080 |
取消代理
1 | git config --global --unset http.proxy |
配置文件
C:\Users\user_name.gitconfig
1 | [http] |
6.git push提交到远程报错“remote: Support for password authentication was removed on August 13, 2021.“
1 | Windows10@X6X8-20190228PT MINGW64 /g/blog/hexo-blog (master) |
从2021年8月13日,GitHub不再支持用密码提交代码。SSH免密与Token登录配置。
SSH
第一步,生成ssh key。
我使用的是Windows系统,通常ssh目录在C:\Users\Administrator\.ssh。如果有配过ssh,那么就会有下面的这些文件,其中id_rsa是私钥,id_rsa.pub是公钥。
如果没有配过ssh,那么在git bash中执行如下命令生成ssh key。
1 | ssh-keygen -t rsa -b 4096 -C xxxxxxx@qq.com |
1 | Generating public/private rsa key pair. |
对于出现的选项默认就好。第一个选项是ssh的保存目录,默认即可;第二个选项如果提示已有ssh则输入y表示覆盖,输入n表示不覆盖;第三个选项是输入私钥密码,如果不想使用私钥登录,那么私钥密码为空,直接回车,要回车两次,因为会确认密码。生成成功后,就可以在目录下看到生成的密钥文件。
第二步,配置到GitHub。
将id_rsa.pub中的内容拷贝到GitHub上新建的SSH keys中。
头像=>Settings=>SSH and GPG keys=>New SSH key
现在使用git push提交还是无法成功,所以现在要使用ssh链接重新克隆仓库,这很重要,需要重新克隆一个远程仓库到本地,再次使用远程提交就可以了
Token
头像=>Settings=>Developer settings=>personal access tokens=>Generate new token
在jetbrains系列中的使用
File=>settings=>version control=>github=>login in with token