GIT之深入敌后

在上一篇日志中,记录了关于GIT的一些基本的操作,这些操作基本能够满足日常开发之用。看到了吧,GIT使用起来也就这几个命令就够了。当然,GIT还有一些强悍的,而又得小心对待的命令。

在这一节中,将会看到GIT的一些比较凶猛的命令,一般是 support 或者integrator用的比较多,而一般的开发人员不需要,也最好限制使用这样的命令。


1. 后悔莫及 (Git reset & revert)

当developer修改了N多个文件之后,突然发现做错了,或者根本不需要这样的功能,那么这个时候Reset就能帮我们排忧解难。GIT reset 有3种不同的使用方式,对应着不同的效果。前面一片日志 提到 GIT的三驾马车: working folder, index 以及 local repository。Reset的3种不同的使用方式跟GIT这三驾马车紧密关联

1) git reset -soft: 只是rollback 了commit的信息,index file跟源代码 不恢复。也就是说除了那个commit没有了,其它的东西都在。如果我们只是需要修改commit的信息,可以用这种方式处理

2) git reset -hard:这是比较凶猛的方式,它恢复commit,index file以及源代码。也就是说在要恢复到的这个commit之后的所有改动都 去掉 (新增的文件一般不会自动删掉)。这种方式适用于pull的时候 失败,而又不想一个一个去处理。

3) git reset -mixed, 恢复commit 以及index file,源代码不变。这是一种很好用的方式,可以既把repository的其它信息复原,而又保留自己想要的代码改动。

GIT reset 这三种工作方式 合理搭配,在恢复 受损代码库的时候 显得特别强悍!!

话说泼出去的水应该不能要回来的,而在GIT这里,应该是可以的。当我们的commit已经push到公共 repository里面之后,才发现我们这个commit改了一些不应该改的文件,而且改动文件超多,比如修改OR mapping。这个时候一个文件一个文件去改回来 就显得很纠结。GIT revert 这时就可以大显身手啦,它能够根据commit的change log,将 整个commit里面所有的文件改动做一个反转操作,原先增加一行的,现在删掉这一行,原先删除文件,现在增加文件。注意哦,一般情况下,GIT revert这种命令只是将那个错误的commit的改动做一个反转,但它不会自动的产生一个新的commit。当GIT revert运行完毕后,文件都还没有加到index里面,更没有commit。

2. 另立门户 (Git branch & checkout)

在Clearcase里面,每一个release都需要创建新的stream,也就是说 developer都需要去重新再克隆一整套代码下来,费时间又费空间。GIT里面就木有这回事啦! 一个release只需要有一条branch就可以啦,而branch也就是一个指针而已,指定当前的branch指向哪个commit。当team pc上面已经有新的branch之后,我们可以用下面的命令去创建一个 跟踪 remote branch的local branch : "git branch R2.0 origin/R2.0". 

很多情况下,developer是需要多个迭代同时开发的, 老的版本可能就是fix bug,而新版的就可能是新功能的开发。这个时候就需要经常在不同branch之间切换,命令 "git checkout R2.0" 可以把我们带到 branch R2.0 下面。但这里需要特别注意在切换branch之前,如果有代码修改,一定要commit,至少加到index。否则,这些修改的文件将会在 没有任何征兆的情况下 “意外”地被带到新版本里面去。比如R1.0里面修改了文件A,但没有commit,也没有add index,就之间checkout R2.0,这个时候文件A的改动会自动出现在R2.0. 这可不是我们想要的!!!


3.桃园结义 (Git merge)

上面说到了大家经常会同时开发多个迭代的代码,那么当旧迭代的代码开发完成后,我们需要将这些个改动同步到新的迭代里面去。手工拷贝肯定是一个“龌龊”的行为的。 这时就用到了GIT merge。这个命令可以将一个branch里面的代码自动merge 到第二个branch里面去。比如当前工作的branch是R2.0, 而在R1.2的时候有一些改动还没有同步过来,这时就可以 "git merge R1.2",这样 GIT就懂得将 R1.2 的代码改动 也在R2.0 执行一次。当然,如果R1.2修改的文件在R2.0也有修改,并且改的是同一行,那么这时就需要自己手工去选择要的是哪一版本的代码.这里需要稍微注意一下的就是 要清楚地知道 要将谁的代码merge到谁里面去


4. 清理门户 (Git cleanup)

前面说过 GIT reset hard是不会删掉新增加的文件的,而当新增的文件很多的时候,而我们又真的不想要这些的时候,我们可以出动GIT 清道夫 cleanup。这个命令会将working folder下面所有没有记录在案的文件一一删掉,还我们一片净土~~~ 

可以使用下面的命令进行出动清道夫 “git cleanup -x ”


前面这几篇日志就基本将GIT的常用以及稍微复杂一点的命令都记录下来了,足矣日常开发以及support,甚至troubleshooting。

在接下来的日志里面,将会记录GIT跟其他工具的一些整合以及使用...



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值