使用 Git 无法正常向 GitHub Push Commits

作为开发人员,我们经常使用 Git 向 GitHub 提交和拉取代码,但有时提交代码一直提示 Failed to connect to github.com port 443 after ××××× ms: Couldn't connect to server 导致一直提示提交错误。

解决方法

获取 Windows 当前代理端口号

Windows:设置-网络和 Internet -代理- 手动设置代理(不同系统版本之间大同小异)

点击“编辑”按钮后,查看当前显示的“端口”号并记住它。

为 Git 配置代理

git config --global http.proxy http://127.0.0.1:端口号
git config --global https.proxy http://127.0.0.1:端口号

上面两条代码都需要执行,且需要用到设备代理页面中显示的端口。如果不需要修改全局 Git 配置则 --global 可不写,这样只修改当前项目的 Git 配置。

为 Git 配置取消代理

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

如果上述配置代理不生效未能解决问题,可使用这两条语句取消代理。

Windows 如何删除右键菜单中的 “Git Gui Here”和“Git Bash Here”

今天重新安装了 Git 后,发现右击鼠标右侧多出了两个选项“Git Gui Here”和“Git Bash Here”。虽然这样证明我的 Git 已经成功安装了,但还是影响使用感受,遂上网寻找了一下相关的解决方案。

手动修改注册表

  1. Win + R 调出“运行”窗口,在搜索框中输入“regedit”打开注册表编辑器;
  2. 在打开的注册表中通过以下路径进行查找: Computer\HKEY_CLASSES_ROOT\Directory\Background\shell 。在下方就可以看到 git_guigit_shell 这两项内容,将其删除即可。
  3. 关闭注册表之后,在桌面上右击鼠标就能看到 “Git Gui Here”和“Git Bash Here”选项就已经被删除了。

直接使用管理员 CMD(命令提示符)执行删除

如果上述方法比较繁琐,可以尝试使用具有管理员权限的 CMD(命令提示符) 执行以下两条语句:

reg delete "HKEY_CLASSES_ROOT\Directory\Background\shell\git_gui" /f
reg delete "HKEY_CLASSES_ROOT\Directory\Background\shell\git_shell" /f

Git 删除历史记录,清理仓库

当 commit 次数很多的时候,项目仓库会慢慢积攒很多无用的提交历史,这些历史记录会在项目 clone 的时候导致速度很慢。如果没有软件,一些 clone 过程体验会很不好,甚至频繁出错,所以删除提交历史可以作为一种清理仓库的手段。

Git 代码

git checkout --orphan latest_branch
git add -A
git commit -am "init commit"
git branch -D master
git branch -m master
git push -f origin master

以下是各条语句的解析

git checkout --orphan latest_branch
# 创建新分支 "latest_branch" 并转到该分支
# git checkout 命令为在当前分支上创建新分支(并转到该分支)
# git checkout --orphan 命令为从空白处创建新分支(并转到该分支)

git add -A
# 添加所有文件(当前最新状态)到暂存区

git commit -am "commit message"
# 将暂存区提交到新纪录(latest_branch分支)
# "commit message"为新纪录的名称

git branch -D master
# 删除主分支

git branch -m master
# 将 latest_branch(当前) 分支重命名为 master(主分支)

git push -f origin master
# 同步本地状态到服务器

# 此时,完成的效果为:
#   将master分支所有记录删除,并新建一个 "commit message" 记录,记录中内容为当前项目最新状态
#   此时远程服务器内所有垃圾都被清空
#   如果使用了 Github Desktop 等软件,本地垃圾可能未被清空,可删除项目并重新 clone