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的官⽅⽂档就是按提交记录做分⽀介绍的,有些⼈可能与我有同样的疑问,提交记录在哪⾥,只能⽤命令⾏看?⽤命令⾏看提交记录是不⼈道的!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将该分⽀的指向选择的版本,如果Rese
t操作跨度较⼤,造成差异项⾮常多。回退后差异⽂件有三种⽅式保留⽅式:Soft:保留⼯作区和索引区;
Mixed:只保留⼯作区,在soft基础上,索引区变更回退到⼯作区,两者差不多。
Hard:丢弃版本间所有的差异,基本属于强制调整分⽀的最新指向版本;
6.在⼀个分⽀上,修改了⽂件未本地提交,现在要按界⾯更新代码,提⽰有差异,⽆法进⾏合并操作?
使⽤git stash⼯具,git gui中没有,tortoise git⼯具中有。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。