总结GitHub上传项目中经常遇到的问题

1. git add 添加多余文件想撤销

我们知道,git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件
git add 如果添加了错误的文件的话

撤销操作

  • git status 先看一下add 中的文件

  • git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 ,HEAD 可以不写,直接git reset

  • git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了,HEAD 可以不写,直接git reset XX文件

2. git commit 提交(未git push)后想回退

如果不小心 弄错了 git add后 , 又 git commit 了。
先使用git log 查看节点
commit xxxxxxxxxxxxxxxxxxxxxxxxxx
Author:
Date:

回退操作

  • 回退到未提交前
git reset --soft 90f1ce4d73c5dc63f46fa61984a6bb878f47374^

3.git commit后,可以使用 git revert(反做)

还原已经提交的修改
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交

  • git revert HEAD 撤销前一次 commit

  • git revert HEAD^ 撤销前前一次 commit

  • git revert commit-id (撤销指定的版本,撤销也会作为一次提交进行保存)

git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。

4.使用git push(将代码推送至远程仓库)报错:Please make sure you have the correct access rightsand the repository exists

报错原因:密钥配置

解决方案:重新配置密钥(搜索下列链接中的“设置SSH key”部分)

ctrl+f 设置SSH key

5.使用git命令git remote add origin url.git报错:fatal: remote origin already exists.

报错方案:上传到git的远程源已经存在

解决方案:删除远程源

Git Bash.exe中键入代码git remote rm origin,然后接着提交:git remote add orgin url.git即可

6.使用git push报错

[root@linux1 php]# git push -u origin master  
To git@github.com:kangvcar/Results-Systems--PHP.git  
 ! [rejected]        master -> master (fetch first)  
error: failed to push some refs to 'git@github.com:kangvcar/Results-Systems--PHP.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first merge the remote changes (e.g.,  
hint: 'git pull') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

报错原因:GitHub远程仓库中的README.md文件不在本地仓库中。

解决方案:Git Bash.exe键入代码git pull --rebase origin master 再接着git push即可。

注:在github新建代码仓库的时候不要勾选创建README.md

7.工作中经常遇到git commit后(尚未git push操作),需要回退的情况具体方法如下:

1.执行git log找到本次commi的ID信息

比如commit id信息为:90f1ce4d73c5dc63f46fa61984a6bb878f47374

2.执行git reset --soft HEAD^操作

对应HEAD即上述commit id信息

git reset --soft 90f1ce4d73c5dc63f46fa61984a6bb878f47374^

说明:最后的符号^记得不要漏掉

此时通过git status时,可以看到git add 的文件(绿色)

3.git reset modify_file

通过git reset modify_file 操作后,

通过git status可以看到红色的修改文件

4.git checkout modify_file

通过git checkout modify_file还原至修改之前状态

8.Git报错解决:fatal: unable to access ‘https://github.com/…‘: OpenSSL SSL_read: Connection was reset

昨天还可以git push代码到远程仓库,今天git push时报了这个错:fatal: unable to access ‘https://github.com/…’: OpenSSL SSL_read: Connection was reset, errno 10054
在这里插入图片描述

产生原因:一般是这是因为服务器的SSL证书没有经过第三方机构的签署,所以才报错

参考网上解决办法:解除ssl验证后,再次git即可

git config --global http.sslVerify "false"

在这里插入图片描述

9.git push后卡住不动

有时候提交本地修改到远程分支时,会出现下图这样卡住不动的情况:
在这里插入图片描述
手动Ctrl+C终止后重新提交还是这样。
解决:

1.手动将仓库sideband属性设置为false,当然也可以设置全局

#全局:
git config –global sendpack.sideband false
#仓库:
git config –local sendpack.sideband false

2.检查是否还有未提交的修改,若有将修改提交,再push
3.解决问题

10.git- remote:error: this exceeds GitHub file size limit of 100.00 MB

由于Github 有单一的文档大小限制,如果超过了100MB就会显示上传失败出现下面的情况。

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: da815a6d6f452ecffe5fa628c59519a8
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File crawlTPL/data/reusageMapping.csv is 332.44 MB; this exceeds GitHub's file size limit of 100.00 MB

传项目到Git上,当某个文件大小超过100M时,就会上传失败,因为默认的限制了上传文件大小不能超过100M。如果需要上传超过100M的文件,就需要我们自己去修改配置。

  • 首先,打开终端,进入项目所在的文件夹;输入命令:
git config http.postBuffer 524288000
  • 执行完以上语句后输入
git config -l 

可以看到配置项的最下面多出了一行我们刚刚配置的内容. (52428000=500×1024×1024,即500M)

11.git push时有些不存在了的文件(或者已经手动删除的文件)还会被尝试提交

在工程中,我添加了一个优酷视频的静态库,我使用终端提交代码时,出现以下错误:

remote: error: File 
ManMao/Classes/Others/Library/YouTuEngineMediaPlayer/libYouTuMediaPlayerEngineYouku.a 
is 137.94 MB; this exceeds Git@OSC's file size limit of 100 MB。

文件超过了限制的大小,不能push成功。暂时就先搁置push了。

但是在上传时由于有广告标识符,所以就先删除了视频这一块。当我删除之后再次上传时,依然出现同样的错误。虽然项目中已经删除了。但是项目的本地仓库仍然存储的有这个东西。那么怎么把它踢出本地仓库呢。找了很久,终于找到一句代码,执行之后即可解决:

$ git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch (上述划斜线的内容)' HEAD

具体实例

$ git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch ManMao/Classes/Others/Library/YouTuEngineMediaPlayer/libYouTuMediaPlayerEngineYouku.a' HEAD

12.实际项目中如何创建分支?

使用git时,每次提交一次都会生成一个版本,git把它们串成一条时间线,这条时间线就是分支。从前面所使用分支到现在,只使用了一条分支,这条分支称为主分支,即master分支。master是指向提交的,HEAD是指向当前的分支;
master分支是一条时间线,当HEAD指向了master时,确定了当前分支,并且确定了提交点
在这里插入图片描述

每提交一次master都会前进一步,所以,提交的次数越多时间线也就越长;
当我们创建新的分支时,会创建一个新的dev,当然这个指针的名字是可以随便定义的,这个指针会指向当前提交点,当HEAD指向这个指针时,就代表当前的分支为dev
在这里插入图片描述

在dev分支上提交一次,dev也向前进一步,随着提交的次数增多,dev分支也就越长。这些提交与master毫不相关,所以master不会动。
在这里插入图片描述

dev的工作完成之后就可以进行master与dev合并的操作了
在这里插入图片描述

合并完后,master的内容已经和dev一样,所以也可以把dev删除了
在这里插入图片描述

上面的一系列操作可以看成是链表的操作,
head是定位指针,master和dev都是一个链表的头指针
head指针指向的链表为当前链表,指向的节点为当前节点,提交点从这个点开始,创建分支也从这个节点开始。
当提交一次时,便在head指针指向的节点后面插入一个节点
每次创建一个分支,就创建了一个指针指向了head指针,当切换到新创建的指针后head就会指向那个分支的指针,开始在这个分支上进行操作
删除操作,即将master指针指向dev指针,并删除dev指针

创建与合并分支的一些命令

  • git branch dev 创建dev分支
  • git checkout dev 切换到dev分支

两个命令合起来等价于git checkout -b dev创建dev分支并切换到dev分支上

git branch 查看所有的分支,以*开头的为当前分支

git checkout dev  切换到dev分支

git merge dev 合并分支

git branch -d dev 删除dev分支


创建dev分支并切换到dev分支
在这里插入图片描述

删除dev分支,注意如果当前的分支为dev分支,则无法删除
在这里插入图片描述

冲突问题

如果在dev上修改完后,还没有合并,master也进行了修改,就会出现冲突
在这里插入图片描述

1.在dev分支上修改readme.txt文件,并提交到版本库
在这里插入图片描述
在这里插入图片描述

2.在master分支上修改readme.txt文件,并提交到版本库
在这里插入图片描述
在这里插入图片描述

3.合并分支,出现了冲突
在这里插入图片描述

那么,如何解决这个冲突呢?

我们先看一下readme.txt的内容,
在这里插入图片描述

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,此时我们可以通过修改文件,留下自己想要的内容,再次提交即可
在这里插入图片描述

现在的master和dev分支变成了如下图所示
在这里插入图片描述

git log --graph可以查看合并的路线 --pretty=oneline表示以行显示
在这里插入图片描述

最后,删除dev分支
在这里插入图片描述

13.关于Support for password authentication was removed on August 13, 2021报错的解决方案

好久没有往Github提交代码了,今天偶然提交代码的时候给报了一个remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.的错误,错误提示如下。

(yolov4) shl@zhihui-mint:~/shl_res/5_new_project/Yolov4_DeepSocial$ git push origin master
Username for 'https://github.com': shliang0603
Password for 'https://shliang0603@github.com': 
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/shliang0603/Yolov4_DeepSocial.git/': The requested URL returned error: 403
(yolov4) shl@zhihui-mint:~/shl_res/5_new_project/Yolov4_DeepSocial$

大概意思就是,你原先的密码凭证从2021年8月13日开始就不能用了,必须使用个人访问令牌(personal access token),就是把你的密码替换成token!

为什么要把密码换成token

下面是Github官方的解释: 近年来,GitHub 客户受益于 http://GitHub.com 的许多安全增强功能,例如双因素身份验证、登录警报、经过验证的设备、防止使用泄露密码和 WebAuthn 支持。 这些功能使攻击者更难获取在多个网站上重复使用的密码并使用它来尝试访问您的 GitHub 帐户。 尽管有这些改进,但由于历史原因,未启用双因素身份验证的客户仍能够仅使用其GitHub 用户名和密码继续对 Git 和 API 操作进行身份验证。

从 2021 年 8 月 13 日开始,我们将在对 Git 操作进行身份验证时不再接受帐户密码,并将要求使用基于令牌(token)的身份验证,例如个人访问令牌(针对开发人员)或 OAuth 或 GitHub 应用程序安装令牌(针对集成商) http://GitHub.com 上所有经过身份验证的 Git 操作。 您也可以继续在您喜欢的地方使用 SSH 密钥(如果你要使用ssh密钥可以参考)。

修改为token的好处:

令牌(token)与基于密码的身份验证相比,令牌提供了许多安全优势: - 唯一: 令牌特定于 GitHub,可以按使用或按设备生成 - 可撤销:可以随时单独撤销令牌,而无需更新未受影响的凭据 - 有限 : 令牌可以缩小范围以仅允许用例所需的访问 - 随机:令牌不需要记住或定期输入的更简单密码可能会受到的字典类型或蛮力尝试的影响

如何生成token

1,打开Github,在个人设置页面,找到【Setting】,然后打开找到【Devloper Settting】,如下图。

在这里插入图片描述

然后,选择个人访问令牌【Personal access tokens】,然后选中生成令牌【Generate new token】。

在这里插入图片描述

在上个步骤中,选择要授予此令牌token的范围或权限。

  • 要使用token从命令行访问仓库,请选择repo
  • 要使用token从命令行删除仓库,请选择delete_repo
  • 其他根据需要进行勾选

然后,点击【Generate token】生成令牌。

在这里插入图片描述

在这里插入图片描述

生成token后,记得把你的token保存下来,以便进行后面的操作。把token直接添加远程仓库链接中,这样就可以避免同一个仓库每次提交代码都要输入token了。

git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
  • <your_token>:换成你自己得到的token
  • :是你自己github的用户名
  • :是你的仓库名称

下面是一个实例:

git remote set-url origin https://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@github.com/shliang0603/Yolov4_DeepSocial.git/

15.报错git@github.com: Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access right

报错原因

Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因

  • 客户端与服务端未生成 ssh key
  • 客户端与服务端的ssh key不匹配

找到问题的原因了,解决办法也就有了,重新生成一次ssh key ,服务端也重新配置一次即可。

但是其实执行命令:git clone git@github.com:jivaklong/Real-Time-Voice-Cloning.git 是没有问题的,于是百度了一番,我理解的是原因是由于你在本地(或者服务器上)没有生成ssh key,你可以在ternimal下执行:cd ~/.ssh ls来查看是否有文件id_rsa以及文件id_rsa.pub,如下图所示:
  在这里插入图片描述
本地没有id_rsa.pub

下面记录下解决办法:

1.首先,如果你没有ssh key的话,在ternimal下输入命令:

ssh-keygen -t rsa -C "jff1314@126.com"

jff1314@126.com改为自己的邮箱即可,途中会让你输入密码啥的(可为空),不需要管,一路回车即可,会生成你的ssh key。(如果重新生成的话会覆盖之前的ssh key。)
 在这里插入图片描述

2.然后再ternimal下执行命令:

ssh -v git@github.com

可能会出现下面错误信息

在这里插入图片描述

3.这时候再在ternimal下输入:

ssh-agent -s

然后会提示类似的信息:

在这里插入图片描述
4.接着再输入:

ssh-add ~/.ssh/id_rsa

这时候应该会提示:

Identity added: /Users/xieliping/.ssh/id_rsa (jff1314@126.com)(这里是一些ssh key文件路径的信息)

5.执行id_rsa.pub路径 查找里面的内容,复制ssh-rsa 里面的内容

cat /Users/xieliping/.ssh/id_rsa.pub

在这里插入图片描述

(注意)如果出现错误提示:

Could not open a connection to your authentication agent.

请执行命令:eval ssh-agent -s后继续执行命令ssh-add ~/.ssh/id_rsa,这时候一般没问题啦。

5.打开你刚刚生成的id_rsa.pub,将里面的内容复制,进入你的github账号,在settings下,SSH and GPG keys下new SSH key,title随便取一个名字,然后将id_rsa.pub里的内容复制到Key中,完成后Add SSH Key。

6.最后一步,验证Key

在ternimal下输入命令:

ssh -T git@github.com

提示:

Hi xxx! You’ve successfully authenticated, but GitHub does not provide shell access.

这时候问题就解决啦,可以正常使用命令去执行其他操作啦。


总结常用操作

  • 查看原来连接的地址
git remote -v

在这里插入图片描述

  • 解除原先连接的所有地址
git remote rm origin

在这里插入图片描述

  • 提交分支的方式
git push -u origin master

git push -u origin master上面命令将本地的master分支推送到origin主机的master分支上,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

  • 合并分支(当前必须在主分支上)
git merge login

我们当前在master主分支上,如果想要合并login,那么就直接执行git merge login,就把login分支合并到master主分支上了,然后就可以正常向远程服务器推送master主分支git push -u origin master

如果我们还想将login分支也提交到远程仓库中去,那么就首先从master分支切换到login分支git checkout login,然后再将本地的login分支提交到远程的login分支中,那么执行git push -u origin login命令即可

用户在第一次往github上传项目的时的注意事项

第一次上传项目时,无论在那个平台,都需要输入你的邮箱和用户名

初次安装git须要配置用户名和邮箱,不然git会提示:please tell me who you are.ht
在这里插入图片描述

你须要运行命令来配置你的用户名和邮箱:git

注意:(引号内请输入你本身设置的名字,和你本身的邮箱)此用户名和邮箱是git提交代码时用来显示你身份和联系方式的,并非github用户名和邮箱,需要注意

git config --global user.email "you@example.com"
git config --global user.name "Your Name"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值