最近使用git,发现之前的命令都不太会用了,所以借这个机会把之前学习GitHub时的笔记再温习一下,把常用命令整理下来,方便以后查阅。 关于如何使用GitHub,我这里有个详细笔记GitHub使用详解,在这里只记录常用的命令和遇到的报错。
我们从git的远程仓库克隆开始:
1. 把代码存储到远程仓库的流程
一般,我们是先从远程GitHub.com上建立自己的一个仓库,然后使用命令:
git clone 仓库地址
把远程的仓库克隆下来,仓库地址在这里找:
看一下克隆结果:
这样,我们就可以在这个仓库中进行我们的工作了。
2. git的工作区域
我们把远程仓库克隆到本地,我们就可以在本地仓库中创建项目,然后同步到远程上去,那么我们究竟通过什么样的方式去同步呢? 我们先看一下git工作区:
我们在本地工作的区域叫做工作区,在这里,我们添加编辑修改项目, 然后通过命令:
git add 文件名 # 把文件提交到暂存区
把我们的项目提交到暂存区保存,可以使用命令
git status # 查看当前文件夹下有哪些文件
如果我们想把暂存区的文件提交到远程仓库上去,需要使用命令:
git commit -m "提交描述"
git push
这样,我们的项目就从本地仓库提交到了远程的仓库中。
脚下留心:
当然通过上面的操作,也可以直接上传文件夹,但是要注意,GitHub是不认可或者说忽略空文件夹的,如果你想上传文件夹,必须保证上传的文件夹不能是空的,否则会默认跳过去, 一个方法就是,你直接在文件夹里见一个README.md文件,这样就可以了。
3. 修改仓库文件
上面是我们提交一个项目到远程的过程,但是如果我们想改一些文件呢? 那么我们就在本地仓库中进行修改文件,然后再使用
git add 修改的文件
git commit -m "描述"
git push
这样完成提交。
如果我们想删除某一个文件或者文件夹的时候,我们这样操作:
# 删除文件
git rm 文件名
# 删除文件夹
git rm -r 文件夹
git commit -m "描述"
git push
这样,我们在本地做出的删除就会同步到远程仓库中。操作基本上差不多。
4 可能会出现的一些报错
4.1 远程修改文件导致两地不同步
这个操作引起的原因: 你在远程库上添加或者删除了文件,就是用网页版添加或者是删除了文件,但是你的本地库中没有进行变动,当你再次通过本地库进行添加文件的时候,就会报这个错误,原因是你的远程库和你的本地库现在不同步了,你得先让它同步起来。 或者是修改了README.md 也算。使用命令:
git pull --rebase origin master
输入这个命令,这样两边就同步了, 然后就可以接着用本地git去上传文件了。
4.2 The requested URL returned error: 403 Forbidden while accessing
因为你不是随便一个项目就可以clone下来之后,再push回去的,你得push到你的GitHub中去。
所以需要修改那个隐藏文件.git 中的config选项。 vi表示编辑的意思,是Linux命令,当然可以右击记事本打开进行修改。
当然在使用之前, 可以先用一个密钥和远程的GitHub进行一个连接。
当然在使用之前,可以先用一个密钥和远程的GitHub进行连接:桌面版操作GitHub(这个博客写的挺详细的)
4.3 上传过大文件报错,删掉还保错
github一般是限制上传文件的大小,不能超过100MB,所以如果上传了大文件,就可能报这个错误。
解决方法是:删除有大文件的commit记录
git rm --cached giant_file(文件名)
# Stage our giant file for removal, but leave it on disk
git commit --amend -CHEAD
git push
注意,不能单纯的光把本地的大文件删掉就完事, 这样提交还是会报错,因为git记录并没有删除。
如果上面这个方法不好使,还有种终极方法:
git fetch -f -p # 从本地拿到远程最新分支,覆盖本地存放的远程分支
git checkout dev # 没有分支的可以不用
git reset origin/dev --hard # 没有分支的git reset origin --hard即可
相当于把本地代码回滚到远端的代码一致;上传到远端代码文件过大时,此种方式比从远端重新拉取方便快捷。 这样本地和远程同步了,然后再删掉大文件重新上传即可。
4.4 git push每次都要输入登录凭据
解决:
git config --global credential.helper store
下一次你再在你的项目中使用
git push
命令的时候,你的登录凭据将会被记住,这样就不用每次push都重新输入一次用户名和密码了。
4.5 error: You have not concluded your merge (MERGE_HEAD exists). git pull拉取代码失败!
$ git push
To ssh://47.95.35.53:2222/php-item/php-test.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://[email protected]:2222/php-item/php-test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
$ git pull origin master
error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.
原因是远程仓库改了东西,没有同步到本地上。
解决办法如下,保留本地的更改:
git merge --abort //终止合并
git reset --merge //重新合并
合并后记得一定要提交这个本地的合并
然后在获取线上仓库
git pull //重新拉取
4.6 git commit或者git merge的时候,报错说编译器什么的一个奇怪错误
$ git commit
hint: Waiting for your editor to close the file... D:/Sublime Text 3/sublime_text.exe' -n -w: -c: line 0: unexpected EOF while looking for matching `''
D:/Sublime Text 3/sublime_text.exe' -n -w: -c: line 1: syntax error: unexpected end of file
error: There was a problem with the editor 'D:/Sublime Text 3/sublime_text.exe' -n -w'.
Please supply the message using either -m or -F option.
这个原因是每次merge都会打开这个editor让你去填写记录名称,而报错只是找不到editor而已。这种情况一般发生在你卸载了之前的编辑器或者改了位置等造成的。
解决方法, 直接改成vim编译器:
git config --global core.editor vim //设置vim为git默认编辑器
这是目前使用GitHub常用的命令和遇到的一些问题,所以暂且记录这么多,后面如果再遇到新的,依然会更新。