GIT tortoise的常用经验

一 关于git tortoise

公司早先是使用SVN进行版本管理的,后来切换到GIT,中间也用过命令行方式,用过GIT GUI方式,也用过GIT 小乌龟方式。这些方式只要用熟了,都能玩得溜只要你喜欢。我个人实测,GIT tortoise的方式效率会高一些。
下面介绍我比较喜欢的小乌龟方式,并结合常用的日常需求,演示如何玩转git tortoise。

二 需求演示

看下面内容的前提是,你已经基本具备git分布式版本控制的原理,以及了解add ,commit ,push ,pull, reset ,revert,log指令的含义。
需求0:远程下载,同步,commit, 上传评审等。
这个是基本需求,比较简单。每个指令具体功能多试几次就知道了。
GIT tortoise的常用经验_第1张图片
GIT tortoise的常用经验_第2张图片
Show LOG界面下,选中任意一个版本,右键可以弹出以下功能框。
GIT tortoise的常用经验_第3张图片

这里要重点说一下 Reset “master”to this.

Reset指令常用来版本回退。版本回退有3种方式:SOFT,MIXED,HARD
GIT tortoise的常用经验_第4张图片
网上有很清晰的解释,见文章:
https://www.jianshu.com/p/c2ec5f06cf1a

SOFT:保留工作目录和暂存区
MIXED:保留工作目录,回退暂存区
HARD: 回退工作目录和暂存区。意味着所有改动都会丢失且无法恢复。

可能新手对于MIXED会不容易理解,举个例子,你新增加的文件需要ADD操作之后,GIT才会记录这个文件,此时如果使用MIXED,那么仍然保留了你ADD的操作结果,你就不用再次ADD这个新文件了。

需求1 :本地版本管理

这个需求是比较常见的,比如正在评审的代码,由于还没入库,无法同步到本地,又想在它的版本上修改,这个时候,你最好本地建立一个git版本。
操作方法:

(1)在任意文件夹下单机右键,点击Git Create repository here.

GIT tortoise的常用经验_第5张图片

(2)在弹出来的对话框中直接点击OK

GIT tortoise的常用经验_第6张图片
(3)至此,你就在某个文件夹下创建了本地的GIT初始版本。
在这里插入图片描述
(4)后续步骤如ADD, COMMIT等如平常操作一致,但不能PULL,和PUSH。

需求2: 多个版本同时修改

在实际的项目开发中,往往存在修改了点A,而点A没有入库或者未经测试,又需要修改点B,C,D。聪明的小明可能修改完点A后,拷贝到本地某个干净的文件夹下,先保存起来,再修改点B,C,D。
一个星期后,发现服务器上的最新代码已经被修改了,此时已经忘了点A修改了什么,只好用版本比较器找到原来的版本,与A对比差别在哪里。
这种做法,我以前也用,往往到后面混乱至极,千头万绪无法理清。只因不懂得分支的妙用。

高效率的方法是:本地分支,本地分支,本地分支

假设现在已经完成了A的修改,那么先将A进行COMMIT, 保存到本地MASTER中,先来看看此时的MASTER LOG在这里插入图片描述
那我们在此基础上,建立分支。
GIT tortoise的常用经验_第7张图片
输入分支名字,可以是中英文。
GIT tortoise的常用经验_第8张图片
创建成功后,切换到修改点A分支。
GIT tortoise的常用经验_第9张图片
查看分支LOG,发现和MASTER的LOG一致。现在,修改点A分支保存了MASTER所有的修改记录,且不依赖远程,不需要同步,你可以在此随意修改,不受其他项目组成员的干扰。

需求3: 版本回退与远程重新同步。

远程MASTER和本地MASTER往往存在不一致的情况。像上面需求2那样更改后,我们本地的MASTER就已经走到了岔路,出现了修改点A的记录,而远程是没有修改点A的。此时直接同步会报错,见下图。
GIT tortoise的常用经验_第10张图片
所以我们需要让本地的MASTER往回走,让所有的脚印和远程一致。
操作方法:查看日志,选择最近的和远程一致的版本,右键选择reset master to this
GIT tortoise的常用经验_第11张图片
选择Hard:会完全回退本地代码与该版本一致,且无法恢复。所以请确定你的修改内容在本地建立了备份分支。(关于Hard, Soft, Mixed的选择,请查看前文)
GIT tortoise的常用经验_第12张图片
然后我们再看MASTER的LOG,发现回到了我们想要的版本,此时再进行同步操作就不会报冲突了。
GIT tortoise的常用经验_第13张图片
这个时候再切换到分支A,查看LOG,发现修改点A的代码仍然保留着。
在这里插入图片描述

需求4: 分支合并(MERGE)到主干

在master上创建了分支,修改了A,B,C,D个修改点,终于测试通过,这个时候想要把代码放到MASTER上提交到远程,首先我们当然是想到MERGE功能。
先看看分支的日志如下:
GIT tortoise的常用经验_第14张图片

接着我们切换到master.
然后执行MERGE, 选中想要合并的分支(修改点A)
GIT tortoise的常用经验_第15张图片
合并完成后,我们再看看MASTER的LOG,你会惊喜地发现,MASTER的日志和刚刚看到的分支A一模一样
GIT tortoise的常用经验_第16张图片
有些同学就说了,能不能把中间的修改点A,B,C,D去掉,我只想把分支的代码拿过来,当作一份新的代码重新提交?

答案当然是可以的,毕竟有CTRL C , CTRL V嘛!

复制粘贴当然是一种方法,但是一种笨方法。这种笨方法的风险是,假如要合并的分支并不是基于现在版本的MASTER上,而是基于上几个版本的MASTER修改,而你又没有发现,那么就会把代码弄乱。

好方法是:MERGE -Squash
Squash的意思是:自动合并代码,但不commit。
这样的好处是,即使分支不是在现在版本的MASTER上更改的,只要代码如果没有冲突,那也会完整地保留所有代码的更改。如果有冲突,那自然会报错,需要解决冲突。

需要注意的是,squash方式无法填写commit message,需要合并完成后,手动commit。
GIT tortoise的常用经验_第17张图片
手动commit后看看效果:
只有一条Log, 而代码包含了A,B,C,D的修改。
GIT tortoise的常用经验_第18张图片

总结

学会以上操作后,我们实现了以下需求:
1 永远保持本地代码与远程代码一致,即执行PULL操作时不会产生任何的冲突。
2 本地修改的所有代码和修改记录都不丢失,在时机合适时上传到远程。
3
关键的窍门在于本地分支的创建和管理,RESET ,MERGE功能的配合使用。
可以说,没有使用过本地分支的GIT USER都不算会用GIT。
没有使用过MERGE都不是合格的GIT USER。

其他:
把source insight工程放在git 目录外,就可以实现切换分支也不需要重新创建si工程,真正实现一个项目,只创建一次si工程。
GIT tortoise的常用经验_第19张图片

你可能感兴趣的:(git)