git的基本用法

一,前言

  网上有太多关于git的用法说明,而我看得云里雾里,可能是本人比较愚笨。平常时间老问别人又觉得很不好意思,估计大多的同学们都是自己解决。后来我想到了买一本书,淘宝上git书籍几百页,吓死个人。话不多说,在此记下我的一点点体会,和大家一起学习,有错误的地方请大家不吝指正!

二,目录  

  三:工作区,缓存区,本地库,远程库的区别。

  四:git协作模式。

  五:常用操作。

  六,小知识技巧

三,工作区,缓存区,本地库,远程库的区别。

  在我知道一些git命令,但是常常不敢随意用的时候(怕自己的git命令“破坏”项目,到时候让别人擦屁股就尴尬了),我请教我们敏哥分享一个博文,他却告诉我:首先要搞清楚本地代码,暂存区,本地分支,远程分支,master分支的含义和关系。啰嗦这些就是要说这几个名词是让我们理解git操作的关键。开干:

  工作区:就是我们实际看到的目录和目录里的内容,我们的编写代码就是在工作区内进行。当我们修改/添加/删除操作后,工作区就发生了改变。

  缓存区:当我们进行add操作后,工作区的修改就保存到了缓存区。它的英文名字叫做stage, 或index,它记录着你对文件的修改。当你仅仅使用了add命令后,这时候stage里面是保存了修改的,但是本地库(版本库)里面是没有改变的。效果如下

 

只有当进行了commit操作后,会把stage(缓存区)清空,使用工作区与本地库一致,如下:

  本地库:顾名思义,本地相对于远程库来命名的。隐藏目录.git,就是Git的版本库。我在此称为本地库,它包含了stage,本地的分支。Git会自动帮我们创建一个名叫master的分支。

  远程库:远程服务器上的另一个项目库。

四,git协作模式

  git 优点在此不多累述,直接说我对git协作的理解。

  首先由经理搭建好项目,放在服务器上(其实就是某一个版本认定为主分支)。然后经理一个人太忙了,完成一个项目耗时太长,于是召集了张三,李四,王五三个同学一起开发。

  1,clone远程代码:git clone 远程项目的克隆地址

  张三首先将远程代码clone到本地。Git就给他创建了一个本地的master。这时候就有了远程库的master分支和张三本地的master分支。这两个分支就是有关联关系的,什么是关联关系,后面说。git branch可以看到单写的master就是本地的master分支,进入git bash(输git命令的地方)那里面看到的括号里面的文字说明你当前处于的分支。

  2,创建本地分支:git checkout -b zhangsan

  这条命令其实是git branch zhangsan  (注释:创建zhangsan分支) 和  git checkout zhangsan (注释: 转换为zhangsan分支)的缩写。

  那你就要为了为什么要创建zhangsan分支呢。因为如果你在本地的master分支上做了commit,你push到的地方是和本地master有关联的远程master分支。那是最后整合的最终的最重要的版本。还没经过经理审核,你就弄上去,那要是除了错那不是麻烦了。于是乎,你建了一个zhangsan分支,你在上面捣鼓来捣鼓去,好,捣鼓满意了,你要提交给经理看看你的最终成果。add ,commit 。本地zhangsan分支很ok了,你心满意足的执行了git push命令。这时候强大的git会为你在远程创建一个zhangsan分支。可以输入git branch -a 查看到,除了本地master,本地zhangsan,远程的master ,还多了一个远程zhangsan(remotes/origin/zhangsan) 。远程的zhangsan和本地的张三是关联的。在本地zhangsan执行pull是将远程的zhangsan代码pull到本地zhangsan分支。在本地zhangsan分支执行git push,是将本地zhangsan分支的代码push到远程的zhangsan分支。

  3,合并远程master分支:git merge 远程主干分支

  这是为了防止别人已经提交了,合并到了远程主分支,而你们同时修改了一个文件。因为你本身对修改的文件比较熟悉,所以你来先合并远程主分支,不然经理处理起你们的冲突会更加困难。这时候merge 远程主干分支,常会让你输入合并的理由Please enter a commit message to explain why this merge is necessary.  解决方法:

    git 在pull或者合并分支的时候有时会遇到这个界面。可以不管(直接下面3,4步),如果要输入解释的话就需要:

    (1).按键盘字母 i 进入insert模式

    (2).修改最上面那行黄色合并信息,可以不修改

    (3).按键盘左上角"Esc"

    (4).输入":wq",注意是冒号+wq,按回车键即可

  记住这一切都是在你的本地的zhangsan分支上输入的git命令。在merge远程的master分支最新代码之后。再次执行git push。这时候你本地的zhangsan分支的代码和远程的zhangsan分支的代码是一致的而且,超前于远程的master分支。可用git diff 查看具体。

  4,提交merge request。

  告诉经理,你提交了代码。让他去合并。我们用的是gitLab,在gitLab找到自己的远程代码分支,上面有显示自己刚刚做出的提交。点击+Merge Request,在里边填好,写上代码说明即可。

  提醒:每次在做一次开发,或者解决一个bug之前先要merge主分支一次,让自己的代码保持最新。

五,常用操作

  git add .  :添加所有修改到stage缓存区。

  git commit - '说明' :提交所有缓存区的修改到对应的版本库。

  git pull :从与之关联的分支上下载最新代码。 

  git push :将当前分支推送到与之对应的分支上。

  git diff:比较工作区与缓存区的区别。

  git diff –cached:比较的是暂存区和版本库的差别。

  git diff 分支地址A:可以查看工作区和分支地址A的差别。

  git diff 分支地址A 分支地址B:可以查看分支地址A和分支地址B的差别。

  git status:查看仓库状态。

  git branch 分支A:创建分支A。 

  git checkout 分支A: 切换到分支A。

  git branch -a:查看所有的分支。

  git branch -d 分支A:删除分支A,‘-d’改为‘-D’是强制删除分支。

  git merge 分支A:将分支A的代码合并到当前分支。

  

  

  不常用:

  git init :初始化Git仓库。

  git log:查看提交历史,以便回退到哪个版本。

  git reflog :查看命令历史,以便回退到未来的版本。

  git checkout -- file:丢弃工作区file的修改。

  git reset HEAD filr :丢弃添加到了缓存区file的修改。

  git reset --hard HEAD^  回退到某个分支

  git rm file:删除某文件。

  git remote add origin git@server-name:path/repo-name.git :关联一个远程库。

  git push -u origin master:第一次推送master分支的所有内容。之后可以不用加“-u”。

  git push -f:强制上传

  git log --graph:查看分支合并图。

  git stash:将工作区暂存起来,使其还原到没有修改之前。

  git stash pop:将暂存的工作区释放出来。

  git remote -v:查看远程库信息。

  git push origin branch-name :在本地推送分支。

  git checkout -b branch-name origin/branch-name:在本地创建和远程分支对应的分支。  

  git branch --set-upstream branch-name origin/branch-name:建立本地分支和远程分支的关联。

  git tag <name>:新建一个标签,默认为HEAD,也可以指定一个commit id。

  git tag -a <tagname> -m "blablabla...":可以指定标签信息。

  git tag -s <tagname> -m "blablabla...":可以用PGP签名标签。

  git tag:查看所有标签。

  • 命令git push origin <tagname>可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d <tagname>可以删除一个本地标签;

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

 六,小知识技巧

  1,Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

  2,当你正在开发功能A时,经理和你说有一个bugB必须立马解决,客服反应很强烈,这个bugB解决起来很简单,只要10分钟。这时候你又不能放弃开发了3,4天的功能A,于是你执行git stash命令,将开发到一般的功能A藏起来,立马解决bugB并且推送上去,发起request请求让经理合并到远程主分支。整个过程15分钟搞定。之后git stash pop继续开发功能A。

  3,在还不是很理解各个命令会有什么作用的时候,多多使用git diff命令。

  推荐大家看这些,以便更加理解。

    分支的新建与合并:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6

    廖雪峰老师的教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  结尾:一个稿写下来还是要蛮久的,转载请注明出处!此篇有些是个人理解,写的不好的地方,更甚者可能有不当或错误,请各位慷慨指出,我定立即改正,以免误人子弟!