你梦想有一天成为git大师,然而面对复杂的git命令,你感觉TMD这我能记得住吗?你曾经羡慕从命令行敲git命令,才会更加炫酷,然而时间一长,TMD命令我有忘了。那么今天我介绍的这款工具会让你从git命令中解救出来,这就是git可视化工具SourcTree。
事实上Git的功能十分强大,而通过使用命令熟记每个逻辑是相对很困难的事情,工作这么年从来没有了解透git的全功能,只是会简单的pus,pull等。当然很多ide开发工具都有格式各样的Git插件,操作方法也各不相同。所以不如直接用不受ide限制的Git管理工具SourceTree,不管你是那种语言,使用哪个开发工具,都从根本上把Git管理从开发工具和繁琐的命令行中解放出来。
介绍
官网介绍
翻译过来:
Sourcetree简化了您与Git存储库的交互方式,因此您可以专注于编码。通过Sourcetree的简单Git GUI可视化和管理您的存储库。
欣赏一下git分支情况
这眼花缭乱的分支线,看着就懵了,其实都是分支进行创建,合并等带来的一个图谱,所有的操作都会记录到git里。本文我们介绍SourceTree的使用。
安装SourceTree
添加仓库
输入仓库的URL
克隆成功后的界面
SourceTree常用操作介绍
- 丢弃:放弃未暂缓区的所有修改(工作区中的修改不会添加到版本控制,就是修改的东西不想提交,就直接丢弃)
- 移除:直接删除文件
- 克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库
- 提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓库做修改后一般都得先提交一次,再推送)
- 检出(checkout):切换不同分支
- 添加(add):添加文件到缓存区
- 移除(remove):移除文件至缓存区
- 暂存(git stash):保存工作现场
- 重置(reset):回到最近添加(add)/提交(commit)状态
- 合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消
- 抓取(fetch):从远程仓库获取信息并同步至本地仓库
- 拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即 pull=fetch+merge
- 推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致
- 分支(branch):创建/修改/删除分枝
- 标签(tag):给项目增添标签
- 工作流(Git Flow):团队工作时,每个人创建属于自己的分枝(branch),确定无误后提交到master分枝
- 终端(terminal):可以输入git命令行
SourceTree的git-flow
GIT-flow介绍
Git 作为源码管理系统,不可避免涉及到多人协作。团队中商定一个工作流程至关重要的。本文已常用的Git flow 做说明,该模型如下图所示:这张很经典的图片一定要在脑海中记住,这才说明你了解了git
模型图
说明:
该模型总存在两个长期(核心)分支
- master
- develop
master ,我们认为该分支存放对外发布的版本,任何时候该分支都是稳定的发布版。我们不可以直接在该分支push 代码。
develop ,我们认为该分支的代码存放的是达到稳定并且准备发布时的,我们的新功能开发都是基于此分支。
其次,项目存在的三种短期分支:
- feature
- hotfix
- release
feature ,即功能分支,我们进行新功能的开发将在此分支上进行。该分支的代码基于develop 并且最终回合并回develop 分支。
hoxtfix , 即补丁分支,我们进行线上问题修复将在此分支进行,该代码分支基于master 并且最终将合并会develop、master 分支。
release, 即预发分支。
操作流程实例
当我们进行新功能开发时,需要基于develop分支拉取feature分支进行开发,如增加了一个功能 我们将基于develop分支创建 feature/news 分支。
当功能开发完毕时,我们将提交merge request,将该功能合并到develop 分支。
当所有feature 功能开发完毕,且都已合并回develop,开发自己测试完毕后。准备创建预发布版本,就可以基于develop创建release分支。此时测试人员可以基于该版本release进行测试,发现了问题,我们在release分支上进行问题的修复。
当具备上线条件时,需要将release分支合并到master和develop分支,同时需要打tag,然后进行上线操作,线上发布的为master分支。
当需要修复线上bug时,我们需要基于master创建hotfix分支,当修复且验证完毕后,将hotfix分支合并回master分支,同时为了保证该hotfix包含在下一个发行版中,同时需要合并回develop分支,同时需要打tag。最后删除hotfix分支。
SourceTree的流程
仓库-->git-flow->初始化仓库
每个客户端都需要进行初始化仓库,本地按照git-flow进行。进行初始化的作用就是按照上文提到的既定的标准流程初始化库。
点击初始化会弹出这个页面,看到下面的分支完全遵循上面介绍的流程
当初始化仓库之后,就可以按照gitflow的标准操作去执行了。选择下一个操作,会给出建议操作。
建立新的功能:新建feature分支
完成功能:当在功能分支上完成开发后,点击完成功能,就会把当前feature分支合并到develop分支。
建立新的发布版本:新建realse版本
完成发布版本:完成之后,会合并到develop分支和master分支
建立新的修复补丁:以mater分支为基础,新建hotfix分支。
完成修复补丁:完成修复补丁,会同步到master和develop分支。
问题:
完成功能分支的时候,出现了完成功能分支没有下拉项。这个很是苦恼。
抓取、获取分支信息fetch
抓取( Mac 下 的名字)获取( Windows 下的名字)指获取服务端 Git 库的变更信息,比如落后几个版本,超前几个版本,我们平常多人协作的项目,提交代码前需要先获取一下,如果服务端有新的提交,再拉取下别人的更改,可以减少代码冲突。
拉取代码
拉取代码是把远程分支的代码拉取到本地,会和本地代码进行合并,如果有冲突,则会提示冲突
提交代码
修改了本地代码,需要进行提交,如下图所示:
点击提交按钮后,进入到提交页面。提交页面可以分为几个区域
左侧区域,文件区域,变更区域,底部区域。其中文件区域的展示根据设置不同可以有不同展示。
文件区域设置。一般情况下 使用分体暂存视图更清晰。
提交流程:
1、将未暂存的文件选中,就会直接把文件放到已暂存文件区域
2、在下方文本框输入本次代码变动的说明
3、SourceTree默认不会推送到远程仓库,打勾会推送变更到origin(底部栏)
其它细节点
在变更区域,会显示本次变更的内容。其中+代表本次增加行;-代表本次删除行;前面2个行号依次代表变更前行号,变更后的行号
可以取消暂存区块。sourcetree 会把所有的变更以区块来分组,所以如果是整个区块的变更都没有意义,可直接丢弃整个块
选择修改的地方,操作按钮会变成,取消暂存行
储藏代码
可以将本地修改的代码,先进行缓存。这种一般情况下是拉取远程代码有问题的时候,为了防止冲突,先把本地代码进行储存,然后拉取远程代码,在应用储藏区即可。
新开分支
在项目中,我们可能分为开发分支、集成分支、生成环境分支等,这时我们只需要在某个节点上右键选择分支即可
推送分支
新开的分支不会在远程显示,所以需要将分支推送到远程。
切换分支
双击分支即可切换分支。
拉取远程分支
1、在远程分支右键,选择从origin拉取即可,获取远程分支
回滚提交
有些时候,我们提交的代码有问题,需要回滚回去。
回滚某次提交
将某次变更(在sourcetree里是某个节点)右键选择回滚提交。
回滚文件
回滚行
忽略文件
项目中,有一些文件夹是需要忽略,而不需要提交到仓库里,比如bin目录下,target目录下文件。这个时候就要把一些忽略的文件或者目录写到.gitignore文件中。同样sourceTree也提供可视化操作
这里支持忽略精确的单个文件、忽略所有扩展名、忽略文件夹下的一切等。忽略以后,我们不会看到这些文件的变动
注意:需要说明的是忽略文件,只能忽略未跟踪文件,如果已跟踪文件(之前被提交过),需要先将这些文件删除后,提交代码库,再次忽略文件。
合并分支
从别的分支合并到当前分支。可以在要合并的分支上右键选择合并到当前分支。
当有冲突时,需要解决冲突,然后提交;如果没有冲突,需要手动点击推送按钮将合并后的变更提交到远程
解决冲突
当和别人改了相同文件的相同行时,(大部分我们多人改变了一个文件,git都会帮我们处理掉,自动合并,但是当改变同一文件的相同行时,在拉取时就会有冲突)
冲突文件截图如下:
解决冲突可以用两种方式
1、对有冲突的文件右键-->启动外部合并工具,一般情况下使用Beyond Compare.来解决冲突。
2、如果用开发工具idea来解决代码,可以使用idea的对比工具,或者使用exclipse工具。此处不做详细说明。
审查文件
假设一个文件被不同的开发修改过,有段代码需要找到修改人,我们可以右键复查文件查看每一行的作者。
查看文件变动历史
我们时常需要查看某个文件变动的历史,这里我们可以右键查看文件的 变更历史
按文件打开历史版本
有些时候,我们也需要查看文件的历史版本,这里可以选中节点后,选择那个变更文件,右键 打开历史版本
打开已选定的版本,可以查看历史文件,以供我们参考。
标签的使用
我们有些时候需要给一个变更增加一个标签,比如我们版本已经稳定了。可以标记为稳定1.0标签。
git tag v1
$ git tag -d v1 //移除标签
效果如下
存档
存档指将当前版本打包成一个zip包。
检出分支
检出分支意思是将当前项目回到选中的版本,这样我们可以很轻松回到任意一个版本,来编译项目,或者检查当时项目的问题。
其它
合并
一般是用于不通分支间,将某次提交的所有变更合并当当前分支。
rebase变基、交互式变基
交互式变都是变基,主要是将远程的这个分支名里的标识改变,大部分场景用不到
将某某分支 重置到这次提交
个功能蛮好用的,可以将目前的分支回滚到那一次的分支,然后将所有的文件变更显示出来,相当于回到当时准备提交的时候(包含之后的所有变动)。
遴选
从不同的分支中检出一个单独的commit , 并把它和你当前的分支合并,类似于打补丁,例如,修复一个所有分支都有的bug这样的场合可以适用。
在分支上右键由以下功能
跟踪远程分支:当未跟踪时表示本地没有和远程建立分支的联系
问题1:SourceTree超前N个版本,落后N个版本
这种情况下比较头疼,你提交不了代码,也拉取不了。主要原因是:有别人修改了这个分支,而且已经提交到远程分支上了,同时我们本地也提交修改了该分支,导致有冲突,就报这个错误,那么怎么体面的去解决这个问题呢?
我现在遇到的问题是落户3个版本,那么我需要回退到3个版本前。
右上角-->打开终端。
git reset --soft HEAD~3
执行完上面命令,发现本地提交的代码回退了,回到了未提交的状态。此时千万不要提交,处理的思路是:先存储本地文件,然后拉取远程文件,然后应用本地存储,然后再提交文件。
贮藏
此时可能会有冲突出现,需要解决冲突。解决冲突的步骤详细参考上面解决冲突步骤。
都看到这里了,你学会了吗?喜欢本文的话,关注公众号,更多精彩技术等你学
版权归原作者 luguangshan 所有, 如有侵权,请联系我们删除。