Git 图形化工具介绍

随git分发的默认的图形化工具git gui和版本分支图形化工具gitk。

一、GIT GUI主界面:

各个按钮的意思基本与界面文字一致,与git的命令也差别不大。在了解自己所做的操作情况下,各个功能点开看下就知道是怎么操作了。即使不了解,只要不做push操作,所有的操作都在本地,基本也没什么影响。大不了重新下载整个库好了,git下载库的时间确实比svn快很多,这也是git优势之一。


1.菜单栏:

2.工作区变更、文件差异对比:点击工作区变更的文件,右侧窗口会显示文件差异对比。吐槽下,对比的时候显示的差异以上下的格式显示,差异对比的体验非常不友好。

3.索引区:使用命令git add或点击”stage changed”按钮后,工作区变更会添加到该区域。

4.基本操作按钮:stage changed:将工作区的所有变更提交到添加到索引区;(其他在菜单栏中都有对应项,介绍菜单栏时一并介绍)

5.Commit信息输入框:用于commit时输入变更信息,与svn提交时填写的信息一样,主要方便后续查找或了解该次提交的目的。

6.Commit方式:创建一次新的提交或者修改上一次提交。对应于菜单栏中commit项中,new commit和amend last commit相同。

二、GIT GUI菜单栏:

repository:git库相关操作,基本意思就是字面意思。

1)资源管理器中浏览该Git库工作空间文件,省去查找路径不断点击鼠标的操作。

2)启动Git bash工具(命令行工具)。

3)查看当前分支文件状态,不包括未提交的信息。

4)查看某个分支的文件(弹出框中可选择需要查看的版本、分支或标签),跟上一条差不多,用的比较少,可能是没有这方面的额需求。

5)可视化当前分支历史、可视化所有分支历史:弹出分支操作历史,也就是gitk工具,放到gitk工具中介绍。

edit:用于操作commit时操作信息输入,只能操作文字输入部分,你没有看错。常用的快捷键大家都知道,何必要单独做成基本没啥用的。本来以为对变更的文件进行批量操作、本来以为可以对未版本跟踪的文件批量删除、本来、、、,都说了是本来。

Branch:新建分支(需要选择其实版本,可以根据版本号、其他分支或标签来选择)、检出分支(觉得切换分支更合适)、重命名分支、删除分支、当前分支Reset操作(会丢弃所有未提交的变更,包括工作区和索引区,当然了,有弹出框提示危险操作)。

Commit

1)new Commit:创建一次新的提交,常规提交方式;

2)Amend last commit(修改上次提交):用于合并多次提交,针对为push操作前多次提交合并操作比较有用,在上次提交已经push的情况下可能会造成提交记录变乱;

3)rescan:用于扫描当前git库的变更,包括工作区和索引区的变更;

4)Stage To Commit:添加选中的变更文件到索引区;

5)Stage changed files to commit:添加所有改变文件到索引区;

6)Unstage from commit:将选择文件的变更从索引区撤回工作区;

7)revert changed:撤销工作区选择文件的变更,文件将还原为未修改之前的状态(但是未进行版本跟踪的文件无法直接删除,未跟踪的文件究竟怎么删除,莫非一定要一个个去找出来删除?很遗憾没在这个工具中找到);

8)show less context、show more context:调整文件差异对比区显示内容;

9)sign off:在commit信息输入框中添加提交人信息,减少手动输入;

10)Commit:提交当前变更到本地;

merge

1)local merge:分支本地合并操作,弹出操作框,选择要合并的版本(可以选择版本号、本地分支、远端分支或者标签,他们的最新状态都指向了一个确定的版本)。要注意A和并B与B合并A是不同的,在A分支上操作合并B会将B中的所有的文件与A做差异运算(这个与方向无关),差异部分会汇总到A中,此时B的状态不会变更。

2)abort merge:终止merge操作。在合并分支操作中产生冲突,当前git库状态设置为mergeing状态,要求解决冲突后进行其他操作。合并出现冲突时,在文件差异对比的区域会显示出冲突的部分,右键可以启动自定义的差异合并工具。

remote:远端操作相关,多个远端仓库时,呈现多个远端仓库

1)fetch:从远端仓库获取更新;

2)remove remote:删除与远端库链接;

3)add:添加远端git库,弹出添加操作框,输入远端库名(可自定义)和仓库链接(初始clone代码时的连接);

4)push:推送本地变更到服务器,会弹出push操作的操作框,与基本按钮区的push按钮操作相同。推送时git的默认设置只允许推送到与本地分支同名的远端分支,如果远端只有一个主分支,本地自建了多个分的的话无法直接完成推送。可以自行修改,不过风险比较大。

5)delete branch:删除远端分支,弹出选择框,选择远端库、远端分支名及操作选项。

tools:自定义操作命令

二、GITK工具:

显示版本提交记录的工具,基本了解过git操作的应该都知道提交记录,毕竟git的官方文档就是按提交记录做分支介绍的,有些人可能与我有同样的疑问,提交记录在哪里,只能用命令行看?用命令行看提交记录是不人道的!

命名行中输入gitk或者在git gui中选择“图形化所有分支历史”:

Gitk主界面如上图所示(几个区域的信息是联动的):

1.   版本分支图:后续将详细讲述版本分支图,经常使用git的应该看下就懂了;

2.   提交人信息:对应提交的提交人的邮件信息;

3.   提交时间:注意是本地提交(commit)时间不是push操作时间;这个是符合git的设计的,但是可能是个坑,沿用SVN的提交记录的做法,最新的提交就一定在最上面,但在git上推送本地变更到仓库后,为了确认成功推送,可能就会出现该次操作排到了版本分支图中间或者根本没有显示到一页上。

4.   版本号:对应提交的SHA1ID,即版本号;

5.   版本信息搜索框:在文本框中输入需要查找的信息;左右下拉框中的相应类型帮助快速精确定位要查找的信息,可按提交人等类型查找提交记录;

6.   详细信息框:最上方为搜索部分:可搜索下方信息展示的相关文字;中部控制区域:根据需要控制下方信息展示框中的内容;信息展示部分:上部有本次提交的提交人邮件、提交时间、本次提交的父子节点、本次提交属于哪个分支、及跟随哪个标签等相关信息。下方是文件差异对比区,上下滚动可查看本次提交所有文件差异(如果做合并操作不会显示文件差异)。

7.   变更文件框:显示本次提交的差异文件列表。

四、版本分支图

git操作历史组成:整个复杂的版本分支由每次小的提交构成,Git为每次提交(commit)生成SHA1 ID(版本号),每次提交时Git能知道本次提交的父节点。常规的提交操作只会有一个父节点,合并生成的节点会有两个父节点。相关联的两次提交互为父子节点,每次提交可能会有多个父节点和多个子节点。

git中本地分支、远端分支或追踪分支、tag都指向一个版本,即一次提交。不同的是分支的指向的版本随着提交和服务器的数据更新不断变化的,tag指向不变,类似于给这个版本(SHA1 ID)取了别名,方便查找信息。因此在选择版本时,可以有多种查找版本的方式,直接通过版本号查找,或通过分支和标签查找。


版本分支图:

以git自身的代码库操作历史为例,gitk工具显示效果如下:


图上元素信息如下(颜色可能由于自定义设置不同):

圆形节点(版本分支图中最基本元素):一次提交,节点间有父子关系,横向蓝色部分为该次提交的相关信息。

黄色节点:有且只有唯一一个表示当前工作空间的文件状态与对应节点一致,时时关注这点就能知道现在工作区的状态;

不同颜色的线段:连接有父子关系的节点,带箭头的方向是由于时间跨度太长,节省空间显示,点击箭头会跳转到对应的节点;

绿色块:本地分支。上图中能看到本地分支:ts、test2,加粗分支名表示当前工作分支,即test2。但工作区状态不一定必须对应一个分支,分支对应的节点不一定是黄色点,不一定有加粗的分支名。

前淡红后绿色块:远端分支。上图有远端分支:remote/origin/maint。

黄色箭头块:标签。上图有标签:v2.10.0-rc0、v2.9.3。两个标签对应不同的版本。

从图上还可以看到:

当前标签v2.9.3、本地分支test2、远端分支remote/origin/maint同时指向同一个版本。本地分支ts、标签v2.10.0-rc0分别指向不同的版本。


右键菜单介绍

在本地分支和远端分支点击右键弹出右键菜单:


在提交记录上右键:


从上图中可以看到,可以直接在此版本的基础上创建标签、以此版本为起始版本创建一个分支、对当前分支进行Reset操作(与gui界面的Reset操作功能不一致,此处的Reset与git reset命令对应)、任意两个版本间进行对比操作等。上下方当前截图中不可用的功能主要用于对比两个版本间差异。上方不可用的按钮用于在当前提交与选择的提交之间做对比,选中一次提交,在其他的提交上直接点击右键,功能可用。下方的按钮可用则需要将在mark某次提交,即点击“mark this commit”。在从SVN切换到git之初,比较疑惑的一点就是怎么进行版本的差异对比,gitk工具的差异对比做的不太好,还是换其他的工具吧。

五、基本操作:

通常来说clone代码到本地后,除开版本控制的专门人员外,常用的操作不过是更新代码、提交代码、提交过程中的冲突处理。以单远端仓库origin,单远端分支master、当前工作分支master的情况下截图说明。多本地分支和多远端分支的情况下根据自己的情况调整。

1.更新代码到当前分支

分为两步:从远端库更新代码到本地仓库、本地分支master与远端master做合并。

用命令操作:git fetch origin、git merge origin/master(或者有设置上行分支时,直接使用git pull,可惜界面上没有)

菜单栏—remote—fetch from—origin


菜单栏——merge——local merge(分支合并)


在tracking branch中选择origin/master(取决于当前分支要与哪个远端分支对齐),完成合并操作,当前分支的代码已经更新。

2.提交代码

命令:add/commit/push,提交代码的界面相关操作基本在git gui界面完成。


选中工作区变更的文件,单个提交到索引区(菜单栏——commit——Stage to commit)或一次添加所有变更文件(基本操作按钮区Stage changed);

Commit信息输入框中填写相关信息,commit按钮完成提交;

基本按钮区push按钮,弹出框如下图:


选择需要推送的分支master(当前工作分支),点击push完成。默认只推送到与本地分支同名的远端分支。如果远端允许创建分支情况下,git会在远端创建一个同名分支,如果不能创建分支,会推送失败,只有将变更合入到其他分支在做推送。如果需要修改,参考push.default配置。

3.冲突处理:

当合并出现,界面显示如下,可以手动合并或启动指定的合并工具合并。


处理完冲突按正常的提交流程就可以了。如果改变注意,放弃合并操作,点击菜单栏中abort merge,终止合并。

4.分支操作

分支由一系列提交、合并操作组成。一个分支的历史是从分支指向的版本节点不断查询父节点,直到git库初始化版本。Git gui和gitK中基本都能完成对应操作。

1.创建分支:

菜单栏—branch—create


输入分支名、选择分支或输入起始版本及下方的操作选项,完成分支创建。

或者直接在版本分支图中右键直接以指定的版本号作为起始版本创建分支。

2.检出分支:(也可以直接检出指定版本)

菜单栏—branch—checkout

选择需要检出的分支,点击checkout,完成分支检出操作。

3.删除本地分支

如果确认该分支的所有提交都已经合并到其他的分支,可以删除。如果未能完全合并,将丢失部分提交记录。有A、B两个分支,A合并了B,A将持有B中所有的提交记录,此时删除B,由于B的所有提交在A中仍然被持有,不会删除提交记录。如果没有做过合并,将删除仅由B持有的所有提交记录。

Gui界面删除分支之间要求选择将提交记录合并到哪个分支。

5.已经commit操作后怎么回退?

git工作方式与SVN不同的一点就是基本所有的操作都在本地完成,因此commit操作生成的版本,应该是一个功能完备的,在项目中应该至少是一个可完全编译通过的版本,commit对应于SVN的提交操作。由于commit操作都是在本地实际上在本地是基本没有差别的,但是仓库的分支就可能出现随意检出版本编译不通过的情况,当然应该也不会随意检出版本。可以将文件还原在做一次提交,但这样推送到仓库后,其他人能看到操作记录。可以在提交时修改上一次提交(如果上一次提交为已推送的提交,可能造成混乱,未试验),这样就合并为一次提交。

回到问题,怎么回退?进行Reset操作,Gitk中有对应功能项。注意应该只Reset到本地还未推送的提交。版本分支图中点击“reset <分支名> branch to here”,git将该分支的指向选择的版本,如果Reset操作跨度较大,造成差异项非常多。回退后差异文件有三种方式保留方式:


Soft:保留工作区和索引区;

Mixed:只保留工作区,在soft基础上,索引区变更回退到工作区,两者差不多。

Hard:丢弃版本间所有的差异,基本属于强制调整分支的最新指向版本;

6.在一个分支上,修改了文件未本地提交,现在要按界面更新代码,提示有差异,无法进行合并操作?

使用git stash工具,git gui中没有,tortoise git工具中有。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐