高大上的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 <filename> 或者 git add . 添加到缓存区
    • git commit - m 'msg' 提交缓存区文件到本地仓库
  • Git移除数据
    • 有些时候会向把已经添加到暂存区的文件移除,但仍然希望文件在工作目录中不丢失,换句话说,就是把文件从追踪清单中删除
    • git rm -cache <filename> 将文件从追踪区域的缓存区域中移除,commit就不会提交了
  • Git移动数据
    • git mv <filename> <newname> 修改文件名称
  • 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 <filename>
    • 如果误删 git checkout -- <filename>恢复道这个文件最后commit 那个版本
  • Git 创建与合并分支
    • 我们知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
    • 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:


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


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


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


      4.png
    • 合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:


      5.png
    • git checkout -b dev 创建一个新分支并切换到Dev分支
    • git branch 查看当前分支及所有分支
    • git branch <name> 创建分支
    • git checkout 切换分支
    • git merge <name>合并某分支到当前分支
    • git branch -d <name> 删除分支
  • 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 对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,645评论 4 54
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,626评论 9 163
  • 一二
    小尔木木阅读 93评论 0 0
  • 没有双休的企业,从本质上来说,是为了压榨员工有限的时间,而放弃了企业更大的发展。
    KooWong阅读 550评论 0 0
  • 文/漠上洋 小区门口有个修鞋老人 手跟树皮一样布满深沟 背像一张拉紧的弓 褪色的迷彩嘲笑着冬天的寒冷 妇人的贵兵犬...
    漠上洋阅读 234评论 1 3