git入门使用教程-踩坑说明(mac/linux):终端使用git在github上传文件代码(init/add/commit/remote/pull/push/reset/reflog/log)


git入门使用教程-踩坑说明(mac/linux):终端使用git在github上传文件代码(init/add/commit/remote/pull/push/reset/reflog/log)

(一)、在github创建仓库(repository)

1、创建新的仓库

在这里插入图片描述
在这里插入图片描述

2、创建仓库选项描述

上述内容填完选完后,点击最下方绿色框即可创建我们的新的仓库。
关于initialize this repository with a README,建议可以不勾,否则新手在首次上传项目文件时可能会遇到些意向不到的问题。
在这里插入图片描述

当你创建新的仓库后,Github会给你一些指令以让更容易地使用git上传自己的项目文件。其中下图中HTTPS链接我们需要记录下,之后在建立远程主机和本地仓库之间的联系的时候会用到。不过我们在仓库的主页也可以看到。
在这里插入图片描述


(二)、进入本地目录和初始化本地仓库(cd / git init)

我们知道git分为工作区、暂存区和版本库。
工作区就是我们本地的目录。
暂存区是使用git add上传后文件存的区域
版本库是使用git commit向分支提交更改后在版本库中会记录提交变化

cd xxx(xxx是你要上传的项目根目录)
git init	# 初始化本地仓库
ls -a	#查看隐藏目录

查看隐藏目录会发现有一个.git文件,这是git自己创建的版本库,之后我们每一次操作都会在该版本库中留下记录,并可以进行恢复。
在这里插入图片描述


(三)、git add / commit / remote / push命令

git add README.md	# 将README.md文件放进暂存区
git status  		# 绿色表示正常放进了暂存区
git commit -m '提交README.md'	# 将放进暂存区的文件提交到版本库
git remote add origin https://github.com/learnerjsk/PythonAutoWork.git	# 添加远程主机,并设置别名为origin
git push -u origin master	# 将本地仓库版本库的内容提交至远程主机合并,有可能会让你输入github账户密码(如果之前没输过)

此时去github上看下自己的PythonAutoWork仓库,可以看到README.md文件的存在。
会有文件内容,以及当时你git commit写的提交注释,提交注释是为了帮助你以后阅读提交说明。
在这里插入图片描述

至此,你可以将自己的文件和代码上传至github仓库,如果你没有遇到特殊情况的话。当然我是遇到一些特殊情况的,并且差点因此付出了惨痛的代价,怪我之前没有学好git教程就直接上手和没有备份文件。踩坑说明放在下面说。


(四)、踩坑说明

1、创建仓库选择初始化README.md文件在git push时出现问题 – ! [rejected] (master -> master (fetch first) 远程仓库包含您本地尚不存在的提交)

1.1、问题描述
git add 机器学习_周志华.pdf 	
git commit -m '提交机器学习周志华.pdf '	# 将放进暂存区的文件提交到版本库
git remote add origin https://github.com/learnerjsk/xxx.git	# 添加远程主机,并设置别名为origin
git push -u origin master	
#我在创建github仓库的时候,选择了初始化README.md文件,所以在git push操作的时候遇到了问题。该问题的意思就是我的远程仓库中存在本地仓库中没有的文件提交。


	To https://github.com/learnerjsk/xxx.git
	 ! [rejected]        master -> master (fetch first)
	error: 推送一些引用到 'https://github.com/learnerjsk/xxx.git' 失败
	提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
	提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
	提示:(如 'git pull ...')。
	提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

在这里插入图片描述

1.2、问题解决
git pull origin master --allow-unrelated-historie	# 强制合并远程仓库和本地仓库,后面会说为什么要加后缀才可以
git push -u origin master	# 将本地仓库commit的文件上传到远程仓库

  • git pull命令后正确信息:
    在这里插入图片描述
    执行git pull强制命令后,会让你输入强制合并的理由,随便输入就好了。
    如果不知道怎么使用vim编辑器。
    i,进入vim的输入模式,输入理由后,点esc退出输入模式,输入**:wq**强制退出保存即可
    在这里插入图片描述
  • git push命令后正确信息:
    在这里插入图片描述
  • 正确执行命令后,github会有你要上传的文件
    在这里插入图片描述

1.3、! [rejected] master -> master (non-fast-forward)解决

出现这个问题也是因为远程仓库和本地仓库之间的提交协同问题,你也可以使用**! [rejected] (master -> master (fetch first)**中提到的方法啦来解决。

	To https://github.com/learnerjsk/xxx.git
	 ! [rejected]        master -> master (non-fast-forward)
	error: 推送一些引用到 'https://github.com/learnerjsk/xxx.git' 失败
	提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
	提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
	提示:'git push --help' 中的 'Note about fast-forwards' 小节。

在这里插入图片描述


1.4、fatal:拒绝合并无关的历史解决

如果你只是使用

git pull origin master

会出现 fatal:拒绝合并无关的历史解决问题

所以需要加上 –allow-unrelated-historie后缀表示强制合并。

	展开对象中: 100% (93/93), 完成.
	来自 https://github.com/learnerjsk/xxx
	 * branch            master     -> FETCH_HEAD
	 * [新分支]          master     -> origin/master
	fatal: 拒绝合并无关的历史

在这里插入图片描述


2、rebase大坑 / git pull --rebase慎用

我参考了某篇CSDN的教程,来解决 – ! [rejected] (master -> master (fetch first) 问题。然后,使用完我就发现,我本地工作区的文件全没了。。

所以大家在网上查到的git命令一定要先弄懂是什么意思再在自己的项目文件中试,否则有可能会出现大问题。

git pull --rebase origin master	# rebase的含义是远程仓库中没有文件的话,会将你工作区的本地仓库也进行更新删除,也就是让本地仓库中文件和你远程仓库保持一致。因为这个时候我远程仓库只有README.md文件,所以我本地文件全没了。

这个时候我是懵bi的。我对git的操作一无所知,git教我做人。后面我会讲我是怎么恢复在本地仓库中被删除的文件的。


3、使用git pull --rebase误删除本地文件解决方法

这个时候其实可以有两种方法(我知道的两种方法):

3.1、push提交到远程仓库以及push文件过大问题

Large files detected / ! [remote rejected] master -> master (pre-receive hook declined

  • 提交到远程仓库再进行下载下来(需要已经执行过addcommit操作)
git push -u origin master	#

一种是因为我git add和git commit因为都操作过了,我的本地版本库.git目录下这些删除的文件是都有的,所以我进行git push上传到远程仓库就行。

但是遇到文件太大的问题,原来github对上传文件有大小限制。
就会出现Large files detected / ! [remote rejected] master -> master (pre-receive hook declined),网上有一些删除那些过大文件的命令。但是我的大型文件很多,所以就放弃这个方法了。而且即便执行成功,也很麻烦。所以可以看下面一个方法。

git rm -r --cached target # target是过大文件的名称

所以就一直出现

3.2、git reset–hard 退回操作恢复误删除文件
git reflog	# 可以所有的commit和reset记录(包括已经删除的记录),而git log不能显示已经删除的commit和reset记录
git reset --hard 绿色框值	# 回退到--rebase操作之前,也就是绿色框值指令,重点是加--hard,hard对工作区也起作用,不加hard只对暂存区起作用,我们目的是恢复工作区文件,所以要加hard

在这里插入图片描述

已经正确检出所有工作区的文件并恢复。
在这里插入图片描述


2020.06.26
希望能帮到大家。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值