GitHub上的版本和本地版本冲突的解决方法
这是自己曾经遇到过的问题,分享给大家,也方便自己下次查找
问题描述
在github上创建项目,在本地运行:
1 | git init |
而忘记git pull -f --all
导致github上的版本里有readme文件和本地版本冲突,git弹出以下错误:
1 | Username for 'https://github.com': XXXX |
解决方法
参考了xwdreamer以及他文章中提及的文章(详见参考文献2、3),其实最简单的解决方法就是一句话:
1 | git push -u origin master -f |
意思是:使用本地的文件强制覆盖已有的分支,因此可能会造成git上文件的修改丢失。使用强制覆盖前记得检查本地和git上文件的修改进度和情况。
终极解决方法
删除项目内的.git
文件夹,一切重新来过。哈哈。注意,GitHub上的版本记录可能会全部丢失。
以下内容也适合第一次提交到GitHub
准备工作
- 你要有个GitHub账号和仓库(废话)
- 电脑安装了Git或类似的软件(也算是废话):Git for Windows or 其它
- 进入你的本地仓库(就是需要上传的项目文件夹内)
开始工作
1 | git init |
仓库有两种操作方式,一种是使用https,另一种是SSH,这里仅介绍SSH的方式。
两者的区别主要有:
(1)使用Https可以克隆任意GitHub上的项目;而用SSH的话,必须是项目的拥有者或管理员,或使用SSH Key,否则会无法克隆。
(2)Https每次push都需要输入用户名和密码,而使用SSH则可以不需要,使用密匙匹配,直接git push
。
(3)SSH传输的数据是经过压缩的,可以加快传输的速度,安全性与速度都更优。
添加SSH Key操作
上述第二步执行后,默认会在C:\Users\用户名\.ssh
中的文件中生成SSK Key(如果没有输入,一路回车的话,生成的文件是id_rsa.pub
,以及默认无密码)
完成后会提示已经生成成功了。
上传Key到Github
- 打开 id_rsa.pub 文件,复制文件中的 key,粘贴到 GitHub 网站 Account Settings 中的 SSH keys,Add SSH key 中。如图:
验证配置是否成功,在git中输入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19ssh -T git@github.com
#以下是返回的信息
#成功的情况
The authenticity of host 'github.com (IP ADDRESS)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
#键入yes
yes
#配置成功
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.
#失败的情况
The authenticity of host 'github.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
#这种情况需回去检查密匙是否复制错了,不匹配,或检查GitHub上是否成功上传。重新操作一遍试试设置用户名和email
1
2git config --global user.name "your username"
git config --global user.email "your email@youremail.com"添加项目
1
2
3git remote add origin git@github.com:XXX/XXX.git #可以直接复制项目页面“Clone or download”中的地址
git config branch.master.remote origin #设置分支为origin
git config branch.master.merge refs/heads/master提交文件
1
2git add -A #添加文件夹内所有文件
git commit -m "填写注释"
其他git命令备忘
新建目录,将其初始化成Git代码库
1
git init "newfolder"
下载某个项目及其历史
1
git clone url
分支操作
1
2
3
4
5
6git branch
git branch -r
git branch new_branch # 创建本地分支,注意新分支创建后不会自动切换为当前分支
git checkout new_branch # 切换分支
git checkout new_branch # 创建新分支并立即切换到新分支
git push origin master:newmaster # origin是远程主机,master是当前分支,newmaster是新分支修改配置
1
2
3
4git config --list
git config -e --global
git config --global user.name "username"
git config --global user.email "email address"删除文件
1
2git rm file1 # 删除file1,并将删除记录放入暂存区
git rm --cached file1 # 停止追踪file1,该文件会保留在工作区