learn-git

git-faq

常见问题

git add . 后想撤销怎么操作?


git commit -am 'file msg' 添加了错误的 commit 信息想修改怎么操作?


如何删除远程分支?批量呢?


如何拉取一个本地不存在的远程分支到本地?


github 拉取比较慢怎么解决?


多个 github、gitlab 等账户并存?


.gitignore 中添加规则无效什么原因?


HEAD^ 与 HEAD~ 有什么区别?

参考


代码回滚:Reset、Checkout 和 Revert 如何选择?

https://github.com/geeeeeeeeek/git-recipes/wiki/5.2-代码回滚:Reset、Checkout、Revert-的选择


常见报错处理

在clone一个项目后做git命令操作时,出现下面错误解决办法:

fatal: Not a git repository (or any of the parent directories): .git

解决办法:你得进入你的工作目录下,然后再git status 或者其它命令就没问题了。

git无法pull仓库报 fatal: refusing to merge unrelated histories

说明:这是在 项目A上修改 ./git/config后,提交到 项目B 上,无法 pull

如果合并了两个不同的开始提交的仓库,在新的 git 会发现这两个仓库可能不是同一个,为了防止开发者上传错误,于是就给下面的提示

fatal: refusing to merge unrelated histories

解决方法 如下

git pull <remote-url> --allow-unrelated-histories

当项目过大时,git clone时会出现error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504 Gateway Time-out的问题

从主干下拉分支并关联分支

针对远程已经新建了分支, 在本地如何关联远程的分支

cloudyan@IT0101 /E/git/webtest (master)
$ git fetch origin

// 如果你的命令无效,我在win8中使用1.8.3就上述命令执行无效,
// 可以使用 git checkout -t 本地分支名 远程分支名,如:
// git checkout -t v4 origin/v4  //v3项目中的分支v4,分支名同则可省略,如:git checkout -t origin/gh-pages
// 使用 git branch -r可以查看远程分支

cloudyan@IT0101 /E/git/webtest (master)
$ git checkout dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'

cloudyan@IT0101 /E/git/webtest (testing)
$ git branch --list
* testing
  master

执行 git commit --date=2019-07-10T12:00:00 时报错,fatal: could not read ‘/Users/jack/.stCommitMsg’: No such file or directory

# 查看 commit.template 以及 Users/xxx,是否配置正确
git config --get commit.template

无权限 push

提示错误

ssh: connect to host ssh.github.com port 443: Network is down
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

可能网络问题

git push 遇到错误

remote: error: GH007: Your push would publish a private email address.
remote: You can make your email public or disable this protection by visiting:
remote: http://github.com/settings/emails
To github.com:dwdjs/xxx.git
! [remote rejected] dev -> dev (push declined due to email privacy restrictions)
error: failed to push some refs to 'git@github.com:dwdjs/xxx.git'

由于设置了邮箱为隐私邮箱,有两种解决方式:

  1. 在 github 上 setting -> Emails -> Keep my email addresses private 去掉勾选。
  2. 或者命令行中配置邮箱为 username@users.noreply.github.com,操作的配置文件为~/.gitconfig
git config --global user.email 'username@users.noreply.github.com'

# 查看所有配置
git config --list

git push 遇到错误

error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
fatal: the remote end hung up unexpectedly

这是因为

  1. git 有两种拉代码的方式,一个是 HTTP,另一个是 ssh。git 的 HTTP 底层是通过 curl 的。
  2. 使用的http2协议 HTTP/2Proxy-Connection 响应头头不兼容

解决办法

参考: