zoukankan      html  css  js  c++  java
  • git的基本用法——我的日常使用

    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

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

      

      

      

     
     

     

     

  • 相关阅读:
    解决ASP.NET中的各种乱码问题
    window.open不被拦截的实现代码
    window.open 浏览器差异.
    使用jQuery获取radio/checkbox组的值的代码收集
    Libnids(Library Network Intrusion Detection System) .
    基于libnids的TCP数据流的还原(多线程实现) .
    Libnids读书笔记 (转)
    PPPOE数据包转换及SharpPcap应用
    [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
    asp.net 读取word 文档的方法
  • 原文地址:https://www.cnblogs.com/hsmWorld/p/8305858.html
Copyright © 2011-2022 走看看