zoukankan      html  css  js  c++  java
  • Git 进阶学习

    基础篇

    1.git commit 

      git 提交记录,执行git commit git会产生一个新的节点并将HEAD移动到最新节点.

      

    git commit 

                                             

    2.git branch

      git 分支是非常轻量级的 并不会对存储造成开销

      

    git branch newImage

      

     在执行git commit 可以看到master 分支前进了(*号表示当前所在分支)

    git commit

    若执行切换分支再执行commit 会发现newImage 分支会前进

    git checkout newImage;
    git commit

     

    3.git merge 

      将两个分支合并 git merge 会产生一条特殊的提交记录,它有两个父节点

      把bugFix 合并到master 节点

    git merge bugFix

          

     在上步骤基础上再把master 合并到 bugFix

    git checkout bugFix;
    git merge master

     4.git rebase

      git rebase  代码合并的另一种方式,原理是复制某些提交记录再提交到某分支上

     现在我们把bugFix 分支合并到master 上

    git rebase master

       

    然后切回master 把 master 分支合并到 bugFix 分支上

    git checkout master;
    git rebase bugFix

     高级篇

    1.HEAD 分离

      HEAD 总是指向当前分支上最近一次提交记录

      

    git checkout c1;
    git checkout master;
    git commit;
    git checkout c2
    

      分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。

        

     2.相对引用

      通过指定hash 值的方式移动不太方便,通过相对引用移动就会方便很多(上诉的c1、c2 就是模拟的hash 值。具体hash值可通过git log 查看)

    • 使用 ^ 向上移动 1 个提交记录
    • 使用 ~<num> 向上移动多个提交记录,如 ~3

      

    git checkout master^
    

        

    git checkout HEAD~4
    

         

    可以使用 -f 参数指向另一提交来移动分支

    git branch -f master HEAD~3
    

      上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。

      

     3.撤销变更

      git reset  和  git revert

    git reset HEAD~1
    

       

     注:在reset后, C2 所做的变更还在,但是处于未加入暂存区状态。

    虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!

    为了撤销更改并分享给别人,我们需要使用 git revert

    git revert HEAD

     

     在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2' 的状态与 C1 是相同的。

    revert 之后就可以把你的更改推送到远程仓库与别人分享啦

  • 相关阅读:
    UUID工具类
    jax-rs 标准以及 结合 resteasy的使用
    Mina.Net实现的断线重连
    Mina.Net实现的UDP协议消息收发Demo
    MySql 比Replace Into更适合的用法,外加SqlServer的方式。
    MySql【Insert Select Not Exist】判断记录再添加值的方案
    MySql中存储过程中的@变量总是无法执行,提示Parameter '@XXX' must be defined
    Go语言使用Beego的ORM插入Mysql后,时区不一致的解决方案
    Go语言中Path包用法
    C#(WPF和WinForm)在普通类中调用到主线程的方法,SynchronizationContext的用法。
  • 原文地址:https://www.cnblogs.com/xiaolin-qian/p/12930497.html
Copyright © 2011-2022 走看看