常见问题

1.使用git提交代码,不是自己的账号

解决方法

1
2
git config --global user.email your-email
git config --global user.name your-name

或者直接删除~/.gitconfig

2.移除文件

a.从磁盘和暂存区中同时删除

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
结果:
Changes not staged for commit:
deleted: C.txt

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。
示例

  1. 新建文件 D.txt echo 哈哈哈>D.txt
  2. 将D.txt添加到工作区 git add D.txt
  3. 删除文件 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 **

原因

LFCRLF其实都是换行符,但是不同的是,LF是linux和Unix系统的换行符,CRLF是window 系统的换行符。这就给跨平台的协作的项目带来了问题,保存文件到底是使用哪个标准呢? git为了解决这个问题,提供了一个”换行符自动转换“的功能,并且这个功能是默认处于”自动模式“即开启状态的。
这个换行符自动转换会把自动把你代码里 与你当前操作系统不相同的换行的方式 转换成当前系统的换行方式(即LFCRLF 之间的转换),这样一来,当你提交代码的时候,即使你没有修改过某个文件,也被git认为你修改过了,从而提示"LF will be replaced by CRLF in *****"

解决

最简单的一种办法就是把自动转换功能关掉即可。
输入命令 :git config core.autocrlf false (仅对当前git仓库有效)
git config --global core.autocrlf false (全局有效)

4.Git仓库完整迁移

完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录

1
2
3
git clone --bare 旧的git地址
cd xxx
git push --mirror 新的git地址

删掉xxx.git文件夹

5.设置Git代理

设置为走代理

1
2
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080

取消代理

1
2
git config --global --unset http.proxy 
git config --global --unset https.proxy

配置文件

‪C:\Users\user_name.gitconfig

1
2
3
4
[http]
proxy = socks5://127.0.0.1:62278
[https]
proxy = socks5://127.0.0.1:62278

6.git push提交到远程报错“remote: Support for password authentication was removed on August 13, 2021.“

1
2
3
4
5
Windows10@X6X8-20190228PT MINGW64 /g/blog/hexo-blog (master)
$ git pull
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/wangyyovo/hexo-blog.git/'

从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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Windows10/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Windows10/.ssh/id_rsa.
Your public key has been saved in /c/Users/Windows10/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:UNVn7BarHwHCcoyLd8QjioXzSiCqqf4SBUpgVjKtzUo xxxxxx@qq.com
The key's randomart image is:
+---[RSA 4096]----+
|o=o. . .*.. . |
|+o+.o ..+ O o = |
|+.=. =.o * o = o |
|oE +o +.o . = |
|o.o. . .S. o . |
|oo . . . |
|. . . . |
|.. . |
|..o. |
+----[SHA256]-----+

对于出现的选项默认就好。第一个选项是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