# Git 常见故障排查和处理
# 移动文件后,丢失 commit 记录
直接操作文件的移动,git 会认为老的文件被删除,而新增了一个文件。这会丢失这个文件的历史 commit 记录。
如果是在 JetBrains 系的 IDE 中做移动操作,IDE 集成的 VCS 会自动处理该问题。
如果是使用命令行,那么应该使用 git mv 命令,来移动文件,从而保持历史的 commit。
git mv [source] [destination] 来可以移动单个的文件或者是文件夹,如果要移动到新的文件夹下,需要保证 destination 是已经存在的文件夹。
完成移动后,需要提交新的 commit,这个移动文件的操作就会被正确记录下来。
# 提交到远端仓库,远端仓库拒绝提交
这个问题出现在 Github 上,其他 Git 的托管平台,未经过测试。
报错如下:
Can't finish GitHub sharing process
Successfully created project 'myproject' on GitHub, but initial push failed:
remote: error: GH007: Your push would publish a private email address.
failed to push some refs to 'https://github.com/me/myproject.git'
2
3
4
出现这个问题的原因,是因为 Github 设置了保持邮箱为匿名。
这里不建议取消匿名,而是使用 Github 提供的另外一个邮箱,形如:12345678+yournameofgithub@users.noreply.github.com 的形式,作为 commiter 的电子邮箱。
对于已经提交的 commit,如果只有最后 1 个提交,是使用真实邮箱提交的,使用下面这个命令,重置掉 commiter 的邮箱信息即可:git commit --amend --reset-author
对于这个问题和解答,可参考 Stack Overflow 的问答 (opens new window)。
# 执行 git clone repository 但是提示失败
可能的原因有 2 个:
- 对于私有仓库来说,在没有权限的情况下,尝试 git clone 会报错,提示无权限
- 使用了 ssh 的协议去 clone 但是没有配置 ssh 密钥
一般是原因 2,尤其是在新开的 VPS、云服务器上。如果只是尝试 clone 公开的仓库,并且没有二次 push 的需要,可以切换到使用 http(s) 协议。
ssh 协议必须要配置了密钥对,才能正常工作,即使是简单的 clone 操作,也要完成基本的设置。