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

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

  

  

  


 

git的基本用法——我的日常使用的更多相关文章

  1. Eclipse Git和sourceTree用法

    Eclipse Git和sourceTree用法 Eclipse Git: 提交代码到git: 1.team->Repository->pull 若没有冲突: 2.team->com ...

  2. Git merge && git rebase的用法

    Git merge的用法: git merge Dev // Dev表示某分支,表示在当前分支合并Dev分支 git merge -m  “Merge from Dev”  Dev //-m可以加上m ...

  3. git clone、git pull和git fetch的用法及区别

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...

  4. Git的一些用法

    三. Git的一些用法 1. .gitignore文件 屏蔽文件 : .gitignore文件是告诉Git哪些目录或者文件需要忽略, 这些文件将不被提交; 常用场景 : 写完代码后会执行变异调试等操作 ...

  5. github+git提交 基础用法

    git版本管理基本用法: 安装就不用说了 随便一搜 安装完 妥妥的.下边说的是在github从新建一个项目开始: 1.首先打开自己的github地址,如下图所示 点加号 选 New repositor ...

  6. 问题: 查看某个文件的修改记录| git log 高级用法

    参考文章: git查看某个文件的修改历史 5.3 Git log 高级用法 基本步骤 git log --pretty=oneline [文件名] git show [节点] git log 两周高级 ...

  7. Git push 常见用法

        Git push 在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,g ...

  8. Git commit 常见用法

        Git commit git commit 主要是将用户通过git add命令添加到暂存区里的改动给提交到本地的版本库,关于版本库的构成可以查看我先前的笔记. 每次提交我们都会在本地版本库生成 ...

  9. Git stash 常见用法

    Git stash git stash这个命令可以将当前的工作状态保存到git栈,在需要的时候再恢复 1.1 git stash  保存当前的工作区与暂存区的状态,把当前的工作隐藏起来,等以后需要的时 ...

随机推荐

  1. Apache Zeppelin 初识

    今天得知了一个Apache的孵化项目zeppelin,特了解一下. Zeppelin是一个Apache的孵化项目.一个基于web的笔记本,支持交互式数据分析.你可以用SQL.Scala等做出数据驱动的 ...

  2. LNMP 如何安装mongodb

    wget -c http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.4.tgztar -zxvf mongodb-linux-x86_64 ...

  3. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  4. MI200e电力线通讯

    最近做课设,选了电力线通讯这种途径,经过百度google等一番查询,最终敲定了mi200e这块国产芯片. 课设要求就是双机通讯,互传传感器信息以及模拟一个时钟 然后淘宝买了拆机的成品,我拿回来把mcu ...

  5. event.target.dataset

    dataset并不是典型意义上的JavaScript对象,而是个DOMStringMap对象,DOMStringMap是HTML5一种新的含有多个名-值对的交互变量. 1.event.target.d ...

  6. css的再深入8(更新中···)

    1.去滚动条的属性 overflow:hidden; overflow-x:hidden; 水平超出的隐藏. 2.z-index 层次叠加 元素重叠 谁的值大谁在上面 (1) 父级出现position ...

  7. C# 控件置于最顶层、最底层

    btn.BringToFront();//将控件放置所有控件最前端 btn.SendToBack();//将控件放置所有控件最底端

  8. yum downloadonly模式,保存所需软件及其依赖包

    command: sudo yum install --downloadonly --downloaddir='yourderictory'

  9. ajax全选、全不选、反选、单删/批删

    <meta charset="utf-8"> <?php //链接数据库 $link = mysqli_connect('127.0.0.1','root','r ...

  10. java 保存到mysql数据库中文乱码

    <property name="jdbcUrl">jdbc:mysql://localhost:3306/company?useUnicode=true&cha ...