美文网首页
Git学习笔记(一)

Git学习笔记(一)

作者: snailpy | 来源:发表于2018-04-27 00:03 被阅读0次

    注:该笔记完全是个人在学习《廖雪峰的git教程》中自己总结的笔记,其中肯定会有不少错误,请读者朋友们斧正,感谢!!
    廖旭峰的官网:
    https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

    Git版本控制:

    本质:对仓库中的文件阶段性修改的记录(即版本库)
    ----------若在仓库中创建一个空目录时,git是不能察觉他的存在的

    svn与git:

    一般:

    svn 集中式的版本控制系统,有一个中央服务器,有网才能工作
    git 分布式的版本控制系统,任何一个节点都可以当作中央服务器,断网也可以工作

    反思:

    开始以为svn真的只有在有网的情况下才能工作,但是很多人说断网也可以工作,不能人云亦云,大量查看评论

    总结:

    所谓的svn只能在有网的情况下可以工作,不是说不能进行开发,修改文件操作,而是指不能提交版本操作(即只有中央服务器维护一套版本库),其他节点主机只能向中央服务器提出commit请求,由中央服务器来执行。而git是每个节点主机都拥有一个完整的版本库,可以在本地断网的情况下随意commit,所有的历史版本都会记录在本地,最后使用push向远程服务器提交自己的文件及版本库

    svn与git的区别:

    svn:必须有中央服务器 (记录版本库)
    git:可以没有中央服务器(本地维护版本库,中央服务器只是用来方便交流)
    所谓不能工作,特指版本提交:
    =====================================================

    GIt使用

    注:该笔记不太适合完全的小白,是自己学习的一个记录;若想从0开始建议移步《廖雪峰的git教程》
    (所有操作均在linux下进行)

    1.安装git:
      sudo apt-get install git    (ubuntu)
      yum install git      (redhat/centos)
    

    2.配置git:

    git config --global user.name 'yourname'
    git config --global user.email 'email@example.com' 
    --global 表示全局设置,这台主机的所有git仓库都使用该配置
    

    3.git仓库初尝试:

    mkdir learngit
    cd learngit
    git init
    vi  a.txt
    git add a.txt
    git commit -m 'add a new file a.txt'
    

    创建了一个learngit目录,将该目录初始化为了git仓库(repository),并添加了一个a.txt并提交到了版本库中

    图解:

    【版本一:】


    gitModel.png

    【版本二:修正版】


    git_2.png
    git init                  (将learngit初始化为git仓库)
    git add a.txt              (将工作区中的a.txt添加到暂存区中)
    git commit -m 'add a.txt'  (将暂存区中的a.txt提交到版本库)
    git reset HEAD a.txt       (将暂存区中的a.txt清除)
    git checkout -- a.txt      (将工作区中的a.txt回退)
    git diff a.txt             (对比工作区与缓存区中的a.txt)
    git diff --cached a.txt    (对比暂存区与版本库中的a.txt)
    git diff HEAD -- a.txt     (对比工作区与版本库中的a.txt)
    git status                 (查看整个仓库的状态)
    git log                    (查看版本的信息)
    git log --pretty=oneline   (单行显示版本库)
    gti reset --hard <commitid>(切换到具体的提交commit)
    git reflog                 (查看git命令记录)
    

    ==============================================

    要点:

    1.在Git中,用HEAD表示当前版本,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    =============================================

    FAQ:将廖大的官网中网友们的一些经典问题搜集:
    Q1:本地版本回滚了,然后想让远端的版本也回滚。
    远程和本地的版本库位:a->b->c
    通过git reset --hard b.id 本地:a->b  push到远程  a->b
    但是会出问题
    
    A1:
    假设一开始你的本地和远程都是:
    a -> b -> c
    你想把HEAD回退到b,那么在本地就变成了:
    a -> b
    这个时候,如果没有远程库,你就接着怎么操作都行,比如:
    a -> b -> d
    但是在有远程库的情况下,你push会失败,因为远程库是 a->b->c,你的是 a->b->d
    两种方案:
    1.push的时候用--force,强制把远程库变成a -> b -> d,大部分公司严禁这么干,会被别人揍一顿
    做一个反向操作,把自己本地变成a -> b -> c -> d,
    注意b和d文件快照内容一莫一样,但是commit id肯定不同,
    再push上去远程也会变成 a -> b -> c -> d
    简单地说就是你无法容易地抹去远程库的提交信息,所以本地提交怎么都行,push前想好了
    
    2.使用 git revert <commit_id>操作实现以退为进,
    git revert 不同于 git reset  它不会擦除"回退"之后的 commit_id ,
    而是正常的当做一次"commit",产生一次新的操作记录,所以可以push,不会让你再pull
    

    相关文章

      网友评论

          本文标题:Git学习笔记(一)

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