美文网首页
git 相关命令学习

git 相关命令学习

作者: 编程的蚂蚁 | 来源:发表于2018-08-13 21:05 被阅读58次
    git是什么?

    Git是目前世界上最先进的分布式版本控制系统
    由Linus在2005年花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!

    集中式版本控制系统和分布式管理系统

    先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
    集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,就很费时间了。
    代表:CVS及SVN

    那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
    当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

    git的结构

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
      Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
      如下图所示:


      git的结构图
    常见命令:

    git init
    Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
    在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)

    git clone
    git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)
    git clone <repo> <directory>
    epo:Git 仓库。
    directory:本地目录。

    例如:
    git clone git://github.com/schacon/grit.git
    

    git add
    git add 命令可将该文件添加到缓存

    git status
    git status 以查看在你上次提交之后是否有修改

    git diff
    执行 git diff 来查看执行 git status 的结果的详细信息。
    git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
    1.尚未缓存的改动:git diff
    2.查看已缓存的改动: git diff --cached
    3.查看已缓存的与未缓存的所有改动:git diff HEAD
    4.显示摘要而非整个 diff:git diff --stat

    git commit
    使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
    使用 -m 选项以在命令行中提供提交注释

    例如:
    git commit -m '第一次版本提交'
    如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。
    如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。
    如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:
    git commit -a
    实际开发中一般这样用:
    git commit -a -m '第一次版本提交'
    

    git reset HEAD
    git reset HEAD 命令用于取消已缓存的内容。

    $ git reset  HEAD hello.php 
    简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。
    

    git rm
    如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作
    git rm <file>
    如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
    git rm -f <file>
    如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,
    换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可
    git rm --cached <file>
    可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
    git rm –r * 
    进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录
    

    git mv
    git mv 命令用于移动或重命名一个文件、目录、软连接。

    $ git mv README  README.md
    $ ls
    README.md
    
    Git分支管理

    几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
    有人把 Git 的分支模型称为"必杀技特性",而正是因为它,将 Git 从版本控制系统家族里区分出来。

    创建分支命令:
    `git branch (branchname)`
    
    切换分支命令:
    `git checkout (branchname)`
    ps:当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 
    所以多个分支不需要多个目录。
    我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,
    从而在该分支中操作。
    例如创建newtest分支,并切到该分支下:$ git checkout -b newtest
    
    合并分支命令:
    `git merge`
    你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。
    
    列出分支基本命令:
    `git branch`
    没有参数时,git branch 会列出你在本地的分支。
    
    删除分支命令:
    `git branch -d (branchname)`
    例如我们要删除"testing"分支:$ git branch -d testing
    
    分支合并
    一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。
     你可以使用以下命令将任何分支合并到当前分支中去:
    `git merge`
    例如:master分支有 1.txt,   2.txt,  3.txt   三个文件
    然后创建从master上创建了一个分支 test
    然后在test分支上删除了1.txt
    然后回到master分支上,将test分支的更改合并过来
    使用:git merge test
    这样master就把对应的1.txt删除了,只剩 2.txt,  3.txt 
    

    git常用命令速查表:


    git常用命令速查表.jpg

    相关文章

      网友评论

          本文标题:git 相关命令学习

          本文链接:https://www.haomeiwen.com/subject/axrubftx.html