git入门使用教程-踩坑说明(mac/linux):终端使用git在github上传文件代码(init/add/commit/remote/pull/push/reset/reflog/log)
上述内容填完选完后,点击最下方绿色框即可创建我们的新的仓库。
关于initialize this repository with a README,建议可以不勾,否则新手在首次上传项目文件时可能会遇到些意向不到的问题。
当你创建新的仓库后,Github会给你一些指令以让更容易地使用git上传自己的项目文件。其中下图中HTTPS链接我们需要记录下,之后在建立远程主机和本地仓库之间的联系的时候会用到。不过我们在仓库的主页也可以看到。
我们知道git分为工作区、暂存区和版本库。
工作区就是我们本地的目录。
暂存区是使用git add上传后文件存的区域
版本库是使用git commit向分支提交更改后在版本库中会记录提交变化
cd xxx(xxx是你要上传的项目根目录)
git init # 初始化本地仓库
ls -a #查看隐藏目录
查看隐藏目录会发现有一个.git文件,这是git自己创建的版本库,之后我们每一次操作都会在该版本库中留下记录,并可以进行恢复。
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教程就直接上手和没有备份文件。踩坑说明放在下面说。
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' 小节。
git pull origin master --allow-unrelated-historie # 强制合并远程仓库和本地仓库,后面会说为什么要加后缀才可以
git push -u origin master # 将本地仓库commit的文件上传到远程仓库
出现这个问题也是因为远程仓库和本地仓库之间的提交协同问题,你也可以使用**! [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' 小节。
如果你只是使用
git pull origin master
会出现 fatal:拒绝合并无关的历史解决问题。
所以需要加上 –allow-unrelated-historie后缀表示强制合并。
展开对象中: 100% (93/93), 完成.
来自 https://github.com/learnerjsk/xxx
* branch master -> FETCH_HEAD
* [新分支] master -> origin/master
fatal: 拒绝合并无关的历史
我参考了某篇CSDN的教程,来解决 – ! [rejected] (master -> master (fetch first) 问题。然后,使用完我就发现,我本地工作区的文件全没了。。
所以大家在网上查到的git命令一定要先弄懂是什么意思再在自己的项目文件中试,否则有可能会出现大问题。
git pull --rebase origin master # rebase的含义是远程仓库中没有文件的话,会将你工作区的本地仓库也进行更新删除,也就是让本地仓库中文件和你远程仓库保持一致。因为这个时候我远程仓库只有README.md文件,所以我本地文件全没了。
这个时候我是懵bi的。我对git的操作一无所知,git教我做人。后面我会讲我是怎么恢复在本地仓库中被删除的文件的。
这个时候其实可以有两种方法(我知道的两种方法):
Large files detected / ! [remote rejected] master -> master (pre-receive hook declined
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是过大文件的名称
git reflog # 可以所有的commit和reset记录(包括已经删除的记录),而git log不能显示已经删除的commit和reset记录
git reset --hard 绿色框值 # 回退到--rebase操作之前,也就是绿色框值指令,重点是加--hard,hard对工作区也起作用,不加hard只对暂存区起作用,我们目的是恢复工作区文件,所以要加hard
2020.06.26
希望能帮到大家。