GIT初学者,记录下学习过程中遇到的问题和解决方法
GIT版本:git version 2.33.1.windows.1
远程仓库:gitee
问题1:PUSH到远程仓库时,提示git@gitee.com: Permission denied (publickey)
解决办法:查找了很多解决办法,基本上都是在本地生成SSH公钥,然后将公钥复制到服务器中,但是这些方法并没有解决我的问题。直到在gitee浏览到 SSH Key 突然失效问题解答及处理办法 - Gitee.com 这篇文章后,尝试了其中的方法,问题才得到解决,关于出现该问题的原因也文章里提到了。
简单说下原因:大家一般都使用如下指令来生成SSH公钥。
$ ssh-keygen -t rsa -C "xxx@email.com"
使用该指令,旧版本git用RSA-SHA1算法生成的SSH公钥,而新版本git(例如:git version 2.33.1.windows.1)用RSA-SHA2算法生成的SSH公钥,而gitee上采用的提取策略还不支持RSA-SHA2,所以gitee会提示拒绝。
问题2:分支push提示Everything up-to-date
本地分支dev与远程分支develop(origin/develop)已完成关联。本地分支dev先进行了2次commit,输入git status指令查询状态:
$ git status
On branch dev
Your branch is ahead of 'origin/develop' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
按照git的提示输入 git push origin origin/develop
$ git push origin origin/develop
Everything up-to-date
git提示“Everything up-to-date”也就是说一切都是最新的,很明显实际情况不是这样的!
在dvcs - Git push won't do anything (everything up-to-date) - Stack Overflow中找到了答案。
解决办法:输入git push origin [loacal_branch_name]:[remote_branch_name],效果如下,push成功:
$ git push origin dev:develop
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 674 bytes | 674.00 KiB/s, done.
Total 8 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To gitee.com:XXX/python-learning.git
abf927a..0e31d4d dev -> develop
个人理解:当我们把远程仓库克隆到本地后,本地仓库所有分支默认的PUSH目标是远程仓库的master。本地分支dev和远程分支develop(origin/develop)完成关联,则是为了PULL。输入指令git remote show origin后git提示如下:
$ git remote show origin
* remote origin
Fetch URL: git@gitee.com:xxx/pythonxx.git
Push URL: git@gitee.com:xxx/pythonxx.git
HEAD branch: master
Remote branches:
develop tracked
master tracked
Local branches configured for 'git pull':
dev merges with remote develop
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
git为’git pull‘命令配置了本地的2个分支:本地的dev->远程的develop,本地的master->远程的master。
git为'git push'命令配置了本地的参考(ref):本地master->远程master
关于’git push‘的详细介绍可以查看帮助文档(git push --help)。