Git Shell常用命令和三种错误的处理方式
说来惭愧,对于我而言,Git Shell是Visual Studio Tools for Git的备用工具。近期因为种种原因,开始尝试使用Git shell来将本地仓库的修改内容更新至远程仓库,在使用过程中困难重重,因此在这里整理了Git Shell常用操作的命令供后续查阅,另外记录了本次尝试遇到的错误及其解决方案,供需要的同学参考。
1. Git Shell常用操作的命令
本小节的内容节选自Git远程操作详解,非常感谢阮一峰老师的辛苦付出。
1.1 git clone
该命令用于从远程仓库克隆一个仓库,命令格式如下,它会在本地主机的指定目录下生成一个与远程仓库同名的本地仓库。该命令可以不需要第三个参数,即<本地目录名>, 若没有第三个参数,那么该命令会在当前Git Shell执行命令的目录下生成一个与远程仓库同名的仓库。
$ git clone <远程仓库网址> <本地目录名>
1.2 git fetch
当远程仓库有更新时,若需要本地仓库拥有同样的更新,则需要用到git fetch命令。
将某个远程仓库的更新全部取回本地:$ git fetch <远程仓库名称>
取回远程仓库的特定分支的更新,例如取回origin仓库的master分支:$ git fetch origin master
1.3 git pull
git pull命令用于取回远程仓库某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。
比如,取回origin的next分支,与本地的master分支合并,需要写成:$ git pull origin next:master
如果当前分支只有一个追踪分支,则可写成:$ git pull
1.4 git push
git push命令用于将本地仓库的更新推送到远程仓库,它的格式与git pull命令相仿。
例如,将本地的master分支推送到origin仓库的master分支:$ git push origin master
如果当前分支只有一个追踪分支,则可写成:$ git push
2. 使用Git上传本地项目代码到github
1 2 3 4 5 6 7 |
$ makdir ~/test-dir //创建一个项目test-dir $ cd ~/test-dir //打开这个项目 $ git init //初始化 $ git add . //选择要添加进仓库的文件 $ git commit -a -m ’commit‘ //提交更新,并注释信息“commit” $ git remote add origin git@github.com:acehjm/test-dir.git //连接远程github项目 $ git push -u origin master //将本地项目更新到github项目上去 |
3. Git Shell使用过程中出现的三种错误及其解决方案
3.1 nothing to commit, working tree clean
完整的错误提示如下图所示,出现该错误的原因应该是本地工作目录没有与远程仓库建立联系,因此git无法比较出正确的结果。
解决上述错误的有效命令如下:
git branch –u origin/master(本地跟踪远程)
3.2. Updates
were rejected because the remote contains work that you do not have locally.
完整的错误提示如下图所示,可能是因为多次尝试commit失败,在暂存区已经包含了之前的commit内容,导致本地仓库,暂存区,远程仓库之间出现混乱。
解决上述错误的有效命令如下:
git pull –rebase origin master(先将HEAD指向origin/master,然后逐一应用本地的修改)
git push origin master(将本地更新推送至github远程仓库)
关于–rebase更详细的说明可以参考以下链接:
Git–团队开发必备神器
3.3. Shal file ‘<stdout>’ write error: Broken pipe00 Kib/s
完整的错误提示如下图所示:
简单的解决方案是增加HTTP缓冲区大小,以便将较大的块推送到远程仓库,命令如下:
git config http.postBuffer 5242880(将http.postBuffer由默认值1M修改为5M)
上述三种错误出现的背景:按照Visual Studio
Tools for Git Connect VS2012 with GitHub所描述的方式将本地代码上传至Github。近期该项目有更新,因为种种原因开始尝试使用Git Shell来将本地更新的内容同步至Github,同步过程中出现了上述错误。