[Git] - 一文领略Git其中的秘密,上传文件从此不再报错
清楚理清Git的操作和原理,了解平常上传错误的根源。
Git: 是一个开源分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
好了闲话少叙,我们先来看一张Git工作的流程图
我们先大致的看一下这个流程稍微在脑海中加深一下对他的印象。
Workspace : 工作区,就是我们在电脑中可以看到的目录
index: 暂存区 放在“.git”目录下
Repository: 本地仓库 上传到本地库的数据只有我们自己可以访问,其他人不能访问
Remote:远程仓库 托管在因特网或其他网络中的你的项目的版本库。 例如:github
下面我们先进行的是从工作目录到本地仓库之间的操作。
1.进入要上传文件夹的内部
2.我们可以通过vim a.md 创建一个文件,里面写入数据,进行git init 初始化,这样我们的文件夹下就会出现半透明的文件夹 .git。git系统当中的的所有数据都存在于.git文件夹之中
3.下面我们应该把文件交给 git 让git 进行管理文件,使用 git add a.md 将文件提交到缓存区,在执行之前我们可以通过 git status 这个命令查看 文件此时的状态
我们可以看出有红色的字体变成绿色 , 说明git 已经跟踪到这个文件, new file 也说明这是一个新的被git管理的文件
4.在执行 git status 这个命令他会提示我们此时的状态和下一步我们要做什么。我们可以看出 no commits yet 现在没有进行提交
我们可以通过 git commit -m “第一次提交” 这个命令可以将数据从缓存提交到本地仓库
通过git status 命令,我们可以看出现在这个文件已经提交到本地 (nothing to commit ,working tree clean) 没有数据提交,工作目录是干净的。
5. git log 查看我们提交的记录
我们可以看到提交的 commit id 相当于文件提交的地址
6.当我们在进行代码开发的时候,我们可以先将一部分代码提交到暂存区交给git管理,当我们在工作目录再次开发代码的时候,如果代码在测试中出现bug我们可以从本地仓库中,将我们原来的代码从暂存区中重新覆盖到工作目录上。我们可以使用 git checkout 文件名
这是我们刚开始创建a.md 中的内容
进行测试的时候我们对齐进行修改
使用 git checkout a.md 将暂存区中的文件 覆盖到工作目录
7.在我们进行工作的时候我们会在工作目录建立许多的其他文件,可能是项目的构思文本,当我们将数据都提交到暂存区,如果不想提交这些文件到本地仓库,我们可以在暂存区中将这些文件删除, git rm --cached 文件名
我们可以创建一个 b.md文件先将它加入到缓存区。
我们看到现在暂存区里面已经有了 b.md
我们使用 git rm --cached b.md
这样就可以将缓存区的文件进行删除,但是工作目录上仍然有这个文件。
8.当我们的工作目录中的代码出现了问题,并且git 的提交记录也出现了问题,我们又想回到出错之前那个文件的状态,那么我们可以通过 git reset --hard commitId 来恢复更新记录
首先我们在创建一个 c.md ,然后和 b.md 一起提交到本地仓库。
假设我们a.md 中的数据出现了问题,我们要回到那个节点去修改数据,我们先把b.md c.md 提交到本地仓库,通过提交记录 git log 找到 a.md 的id,在使用 git reset --hard commitId
可以看出我们现在已经恢复了 a.md 这个文件 ,b.md c.md在工作目录也会被删除
9.经过了上面的操作我们已经对git命令有一些基本的了解,下面我们要讲一下 master 是什么?
master(主分支):第一次向git 仓库中提交更新记录时自动产生的一个分支。
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。主线一般都是产品已经上线中的文件代码。而分支就相当于打游戏时我们所刷的副本。
所以创建分支十分重要。
开发分支(develop):作为开发的分支,基于master创建,开发相互独立,完成开发分支后将会向主分支上进行合并。
功能分支(feature):作为开发具体功能的分支,基于开发分支创建,当完成好功能后就往开发分支上进行合并(merged)
分支的命令:
git branch 进行查看分支
我们可以git中只有一个主分支 绿色的字体
git branch 分支明名称 创建分支
git checkout 分支名称 进行切换分支
在分支上创建文件,当我们要切换到主分支上的时候,我们要将文件提交到本地仓库,否则在git中将会出现异常。
当我们再次切换到master时,我们再次观察master中的文件
分支独立工作,互补干扰。
将主分支与test分支合并 使用 git merge 来源分支 这个操作必须要切换到master上进行才会生效
这样我们就可以在主分支上访问在test分支上创建的文件。
那么分支的功能使用结束了,我们怎样删除它呢,有点过河拆桥,哈哈,使用 git branch -d 分支名称 这样可以删除分支,但是git内部为了防止误删分支,所以分支不合并之前,使用 -d 不会删除分支,实在想要删除就要选用 git branch -D 分支名称
在实验中我已经完成合并,所以我使用哪种都可以删除分支
这样我们就成功的删除了分支
在我们实际的开发中,我们可能会遇到,当我们正在使用分支进行开发功能,这是产品经理过来讲线上出现bug要求你立即修改,但是当前的代码还未开发完成,不想要提交本地,到是一旦不提交,写的文件将会出现错误。
所以使用 git stash 可以暂时提取分支上所有的改动并存储
当线上的bug修改完毕后在使用 git stash pop 恢复改动,切记一定要进入分支目录
上面就是我们工作目录到本地仓库进行的操作,那么我们还要学习最重要的功能就是为了实现远程仓库,协同开发的功能。
我们可以选择 github 做我们的远程仓库,进行我们项目代码的托管。
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。
首先我们要注册账号。这点就不想详细介绍了…
在实现远程仓库的功能前,我们要首先理解协同开发的步骤
引用了这个图,我们设置两个程序员,一个叫 小Q ,一个叫小R吧,上面名字太复杂
1.小Q在自己的计算机中创建本地仓库
2.小Q在github中创建远程仓库
3.小Q将自己本地仓库推送到远程仓库
推送:
git push 远程仓库地址 分支名称
git push 远程地址的别名 分支名称
当要把项目远程到远程仓库中最后一个仓库时。我们首先拿到这个仓库的地址
仓库地址为:https://github.com/lovebxy/-.git
所以我们推送的命令就是 git push https://github.com/lovebxy/-.git master
再一次推送的时候会让你输入 github的账号和密码 在win10中这些密码都会存放在 控制面板\用户帐户\凭据管理器
那么每次提交的时候都是这样就太麻烦了
所以我们可以先创建一个远程仓库地址的别名,将地址等信息保存在其中
git remote add origin(自定制的名字)
下面直接就可以使用 git push origin master 进行提交
如果你还嫌弃麻烦我们直接可以使用
git push -u origin master 这样git 将会记住你的远程地址和分支名称,这样在下次直接输入 git push 就可以实现推送数据的操作了
但是在这我遇到了错误
To https://github.com/lovebxy/hello.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/lovebxy/hello.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 push https://github.com/lovebxy/-.git master 应该也不会报错。
通过了上面的方式,小Q也就完成了创建远程仓库的事情。
4.小R克隆远程仓库到本地进行开发
使用 git clone 远程仓库地址
这样小R就可以在本地中进行开发
5.小R将本地仓库中的内容推送给远程仓库
git init
git add .
git commit -m “”
git push https://github.com/lovebxy/-.git master
当然了这是肯定不行的,如果这样话,岂不是就乱套了
在实现远程仓库协助开发时候,小Q应该在github中设置 准许小R的github账户可以上传文件到仓库。
由于没有两个账户,将就看下,哈哈
邀请过后,会有一个邀请的链接,小Q要将链接发送给小R,当小R打开这个链接接受邀请,重复刚才的命令就可以提交数据到远程仓库了。
6.小Q将远程仓库中最新的内容拉取到本地
通过 git pull 远程仓库地址 分支名称
这样就可以将远程仓库最新的版本拉取到本地仓库了
这样就可以完成协助操作来完成一个项目了。
了解到这些,应该 就可以算消灭 git 知识的一大半内容了。
加油 !!!
欲求小小赞,不知君满吾 。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)