不小心使用 git 强制 push 推送了代码, 希望回退到 push 前的状态
如果不小心使用 git 强制 push 推送了代码,还可以回退到 push 前的状态。主要可以通过以下两种方式:
- 使用 git reflog 查找回退到 push 前的 commit
git reflog
会记录最近的操作和 commit 记录,找到 push 前的提交点。
然后使用 git reset --hard <commit>
回退到那个提交点即可。
- 如果进行了多次 push,reflog 记录很乱,可以回退到某个知道的良好版本
例如回退到版本 v1.2:
1 | git reset --hard v1.2 |
然后使用 git push -f
强制推送来覆盖之前的错误提交。
当然最好的方式还是在推送前使用 git stash
暂存变更,或新建分支进行操作。
但强制 push 后的恢复还是可以的,主要是使用 git 提供的回退机制来撤销错误的提交。
git通过ssh认证拉取代码失败,需要手动输入密码:
- 解决方法
eval ssh-agent -s
#启动ssh-agentssh-add "私钥文件地址"
# 添加私钥到agent 如:ssh-add "c:/Users/xxx/.ssh/id_rsa"
- 第二步提示: Could not open a connection to your authentication agent
执行
ssh-agent bash
ssh-agent是用于管理SSH private keys的, 目的就是对解密的私钥进行高速缓存。ssh-add提示并将用户的使用的私钥添加到由ssh-agent维护的列表中;git拉取代码的时候,直接使用这里的ssh私钥和远端库中的公钥做认证,不用手动再输入密码。
windows下打开git bash后,将上面两行命令加入到/etc/bash.bashrc中可以解决每次打开git bash都需要手动执行ssh-agent和ssh-add的不便
提示Key is invalid
此时我们可以使用私钥,也就是生成秘钥对时的两个文件之一 :id_rsa,我们将id_rsa复制一份,命名为id_rsa.ppk作为私钥。 id_rsa里面的内容是私钥,但文件格式不是私钥,只保留备份即可,如下。

除此之外我们需要一个非常小巧的秘钥生成工具puttygen,下载链接 https://www.puttygen.com/download-putty 找到 puttygen.exe 选择32或64位版本,下载
首先我们确保秘钥类型是RSA, 字节数默认是2048, 对应ssh-keygen -b接的参数
下面是选择私钥:可以选择Generate,生成一个秘钥对(公钥和私钥)然后保存为.ppk文件,
也可以使用ssh自己生成的那个私钥,也就是我们刚刚复制命名为 id_rsa.ppk 的私钥文件(这里我使用复制的id_rsa.ppk)
准备好私钥后,点击load,载入私钥, 选择你私钥(我选择我们的id_rsa.ppk)
此时点击Save private key 将新的私钥保存为.ppk文件。配置git的remote时使用此私钥
fetch-pack: unexpected disconnect while reading sideband packet
- 一般是因为项目分支过多,导致你要下载的东西太多,从而引起这个问题;
- 引起这个问题的根源是文件过多,所以我们可以分批次下载文件,先下载一部分,再下载剩下的。
关闭 core.compression
1 | git config --global core.compression 0 |
使用depth下载最近一次提交
注:--depth
后的是 数字 1;url是项目ssh地址
1 | git clone --depth 1 url |
获取完整库
1 | git fetch --unshallow |
解决问题
- Could not resolve host: github.com
直接修改/etc/hosts文件,windows系统应该也一样,直接修改host文件即可,在底部添加:
192.30.253.112 github.com
- git pull出错:error: failed to push some refs to/git pull origin master --allow-unrelated-histories
1 | git pull origin master --allow-unrelated-histories |
- Git Clone错误解决:GnuTLS recv error (-110): The TLS connection was non-properly terminated.
1 | apt install apt-transport-https gnutls-bin -y |
- Ubuntu: gnutls_handshake() failed: Error in the pull/push function.
1 | 1. apt install -y build-essential fakeroot dpkg-dev |
1.如果第二部出现问题
E: You must put some ‘source’ URIs in your sources.list”
执行如下
sudo sed -i -- 's/#deb-src/deb-src/g' /etc/apt/sources.list && sudo sed -i -- 's/# deb-src/deb-src/g' /etc/apt/sources.list
- sudo apt-get update
2.如果下载时候报错,可以多执行几遍