高大上的Git

前言

虽说用了git 一段时间了,但是却没有深入了解过,今天随着廖雪峰大大的git教程来学习一波,顺便总结一下,方便以后复习。欢迎大家访问我的博客啊

集中式版本管理和分布式版本管理

  • 集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。集中式版本控制系统最大的毛病就是必须联网才能工作。
  • 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。但是这里说的不依赖网络,并不是完全不依赖网络就能完成所以的事情,比如让其他开发人员拿到你的改动,所以说这里所说的不依赖网络只是相对的,在没有网络的情况下,可以提交变动到本地的版本库,但最终还是要依赖网络提交变动让其他开发人员看到。

安装

  • linux下:安装比较简单,像我使用的deepin(linux的一种发行版)只需要一条
    sudo apt-get install git 就可以完成。
  • Mac OS X 上:直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
  • Windows下:从https://git-for-windows.github.io下载,或者国内镜像

创建版本库

  • 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
    • 在磁盘合适的地方,新建一个目录
    • 在win下,为了避免不必要的麻烦,创建目录的路径不要有中文。
    • 通过git init命令把这个目录变成Git可以管理的仓库:
    • 瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
    • 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

Git基本操作

  • Git提交数据
    • 我们可以简单的把工作目录理解成是一个被Git服务程序管理的目录,Git会时刻的追踪目录内文件的改动,另外在安装好了Git服务程序后,默认就会创建好了一个叫做master的分支,我们直接可以提交数据到了
    • git add 或者 git add . 添加到缓存区
    • git commit - m 'msg' 提交缓存区文件到本地仓库
  • Git移除数据
    • 有些时候会向把已经添加到暂存区的文件移除,但仍然希望文件在工作目录中不丢失,换句话说,就是把文件从追踪清单中删除
    • git rm -cache 将文件从追踪区域的缓存区域中移除,commit就不会提交了
  • Git移动数据
    • git mv 修改文件名称
  • Git 历史记录
    • git log 查看提交历史记录
    • git log -2 查看最近提交历史记录
    • git log -p -1 -p显示每次提交的内容差异,-1表示最近一次
    • git log stat -2 -stat简要显示增改行数,这样可以看到修改过的内容,对文件添加或移动的行数,并列出增减的概要信息
  • Git 版本回退
    • git log 可以查看提交历史,以便确定要回退到哪个版本,用 commit id 来回退
    • git reset --hard HEAD^ ^表示退回上一版本,^^ 上两版本 HEAD~100上100版本
    • git reset --hard commit_id 任意之前版本
  • Git 版本前进
    • git reflog 同上
  • Git 撤销修改
    • git checkout -- file
    • git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
      • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
      • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    • 总之,就是让这个文件回到最近一次git commit或git add时的状态。
  • Git 删除文件
    • git rm
    • 如果误删 git checkout -- 恢复道这个文件最后commit 那个版本
  • Git 创建与合并分支
    • 我们知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
    • 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:


      高大上的Git_第1张图片
      1.png
    • 每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长:
    • 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:


      高大上的Git_第2张图片
      2.png
    • 你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:


      高大上的Git_第3张图片
      3.png
    • 假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并


      高大上的Git_第4张图片
      4.png
    • 合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:


      高大上的Git_第5张图片
      5.png
    • git checkout -b dev 创建一个新分支并切换到Dev分支
    • git branch 查看当前分支及所有分支
    • git branch 创建分支
    • git checkout 切换分支
    • git merge 合并某分支到当前分支
    • git branch -d 删除分支
  • Git解决冲突
    • git的强大之处就在于,他可以将冲突部分用 <<<<<<<=======>>>>>>>标记出来,当手动解决冲突后,提交合并。
    • 可以使用git log --graph查看分支合并图

常用git命令及注释

  • add #添加文件内容到文件缓存区
  • branch #列出、创建或删除分支
  • checkout #检出一个分支或路径到工作区
  • clone #克隆一个版本库到一个新目录
  • commit #记录变更到版本库
  • diff #显示提交之间、提交和工作区之间等的差异
  • fetch #从另外一个版本库下载对象和引用
  • grep #输出和模式匹配的行
  • init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库
  • log #显示提交日志
  • merge #合并两个或更多开发历史
  • pull #获取并合并另外的版本库或一个本地分支
  • push #更新远程引用和相关的对象
  • rebase #本地提交转移至更新后的上游分支中
  • reset #重置当前HEAD到指定状态
  • rm #从工作区和索引中删除文件
  • show #显示各种类型的对象
  • status #显示工作区状态
  • tag #创建、列出、删除或校验一个GPG签名的 tag 对象

你可能感兴趣的:(高大上的Git)