首先,在此感谢 ジーノ网友耐心细致的指导!接下来我把遇到的问题和解决方案提交,一来记录经验,今后忘了也还可以再查看,二来希望和我有类似经历的人可以不用走我走过的弯路。
首先你要弄清楚这几个概念:
提交(commit),指将本地的更改让 Git 记录在本地仓库
推送(push),指将 commit 发送到远端仓
add 跟踪更改,commit 记录更改,push 推送更改
Git 只记录更改
有远端仓的话,用 git clone <远端仓地址> 来初始化一个仓库
(没有的话,用 git init,其实 git clone <远端仓地址>= git init + git remote add origin <远端仓地址>
对于绝大多数情况,一个仓库一生只需要执行 init 或者 clone 一次,而且 clone 就不需要 init,init 就不需要 clone
我在网上看的教程:
git add README.md
git remote add origin <git地址>
git remote rm origin ----这里是删除了origin
git push origin master ---你才推送就会失败
这里后面两步其实是错误的。
你在怎么折腾你的 origin……
你刚刚执行的是 clone,origin 已经写好了,
然后你 git remote add origin:
因为 origin 已经存在所以 add 不了
然后你 git remote rm origin,把 origin 删了
然后你 git push origin master,
你刚刚把 origin 删了自然没法 push
只有 add 没有 commit是提交不成功的。
对 Git 来说,文件有三种状态
状态:
被添加(added,指上次 commit 还没有,现在新建的文件),
被修改(modified,指上次有,这次被修改了的),
被删除(deleted,上次有,现在没了的文件),
git add 可以将这三种状态纳入跟踪,如果你用 commit -a 的话,
它只实现了 add 被修改和被删除的功能,如果是被添加的,commit -a 会无视它们。
即,如果自上次 commit 之后你没有新增文件,你可以用 git commit -a 来同时完成 git add 的操作,
但是有新增文件的话就不行了
然后 -a -m 的差别
它们根本在功能上就没有任何冲突或者相交之处,无从说起它们的差别
-a 我解释了,其实就是部分的 git add
-m 嘛,Git 规定每个 commit 都必须有个 commit message(提交信息),来描述你这个提交做了什么,使用 -m 后面跟一个字符串就是用那个字符串来指定提交信息。如果没有 -m 的话,因为你让 Git 执行 commit 的动作,这时它需要一个 commit message,就只能用文本编辑器让你写喽。文本编辑器是什么,就只能有 vi 了喽
而有个经典的笑话,“如何产生随机字符串?让新手退出 vi”,所以你进入 vi(我应该用“误入”“误闯”吧)之后我说“进入了产生随机字符串的界面”
退出 vi 的命令就是 :q(保存是 :w,保存退出是 :wq,不保存强制退出是 :q!)
你不知道怎么退出 vi,合理也就不知道怎么编辑,所以一定是没改过的,所以 :q 就足够了
有新增文件就老老实实 add, commit, push
没有新增文件就可以(偷懒地) commit -a, push
文件夹被锁住
你把那 vi 窗口直接关掉的
你现在能做的就只是先进 commit 窗口,这时 vi 会问你各种,安全退出后重新 commit 就好
把锁文件删掉
rm ./.git/index.lock--记得rm 后面加个空格
git commit -m "提交信息,想写什么就写什么,最好用一句话表达出你做了什么"
那我提交项目的话,就只需要add +项目名是吗?
嗯,你需要做的全过程是
网页上新建一个远端仓,_不_选择初始化 readme(为了得到一个空仓),然后记下仓库地址。
来到你的 workspace,你已经有个文件夹是 E:\code\github,嗯在那里右键 git bash
命令行中,git clone <刚刚记下的仓库地址>
关掉 git bash。
然后你回去文件夹界面看,会看到一个新文件夹以你仓库名命名的。
打开它,把你整个项目复制进这个新文件夹。
右键 git bash
add commit push 三件套:
git add <提交的文件>
git commit -m "文件说明"
git push origin master
完事。
如果本地有删除修改:
git add .
也许这里还要:git commit -a
git push origin master
可是在接下来提交的话,远端还是提交不成功,我就更新:
git pull
望指正!