8、IDEA集成Git
8.1、配置Git忽略文件
8.1.1、忽略文件的原因
在使用 IDE 工具时,会自动生成一些和项目源码无关的文件,所以可以让 Git 忽略这些文件。
此外,把这些无关文件忽略掉,还能够屏蔽不同 IDE 工具之间的差异。
8.1.2、创建忽略规则文件
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/nxmitqha_gin0.png)
如上图所示,在用户家目录下创建了一个忽略规则文件 git.ignore(前缀名随便起,后缀必须是 .ignore,推荐命名为 git.ignore)。
实际上,这个忽略规则文件在任意位置创建都可以,但为了方便让 ~/.gitconfig 文件引用,推荐放在用户家目录下。
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
8.1.3、引用忽略规则文件
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/nyvqkzub_qptk.png)
如上图所示,在 .gitconfig 文件(该文件的来源见 3.2节 )中,引用(刚创建的)一个忽略规则文件。
git config --global core.excludesfile 忽略规则文件路径/git.ignore
注意:所引用的文件路径分隔符,要使用“正斜线(/)”,不要使用“反斜线(\)”。
此外,必须使用执行命令的形式来设置引用文件,直接在 .gitconfig 文件中编辑文本内容会导致引用失败,出现下面的警告:
warning: unable to access 'C:/Users/liaojy/git.ignore': Invalid argument
8.2、定位Git程序
8.2.1、使用IDEA创建一个项目
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/ntxohedw_brow.png)
如上图所示,创建一个新项目。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/cuxjgqzo_rfpe.png)
如上图所示,该新项目是一个 maven 项目。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/dxdoilwt_5din.png)
如上图所示,该项目的名称设置为 git-test 。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/jpfgxpfd_2iix.png)
如上图所示,设置该项目所在的路径。
8.2.2、选择本地已安装的Git程序
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/vwnqpvsa_hg7u.png)
如上图所示,打开IDEA的 Settings(设置)界面。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/ufkhvrqi_irnt.png)
如上图所示,在 Settings(设置)界面中,找到 Git 的设置界面。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/xnpotjzg_p5oe.png)
如上图所示,选择了一个本地已安装的Git程序,并且测试该 Git 程序是正常的。
8.3、初始化本地库
8.3.1、查看项目的文件夹
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/xmwcidlk_46eh.png)
如上图所示,右击项目名,然后点击“Show in Explore”,便能查看项目的文件夹。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/cekvzgcc_4392.png)
如上图所示,在项目的文件夹中,并没有“.git”子文件夹,说明该项目还没有被 Git 所管理到。
8.3.2、使用IDEA初始化本地库
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/igkkafak_tcfo.png)
如上图所示,在 VCS(Version Control Settings)菜单中点击“Create Git Repository”选项。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/qemmghsw_df8k.png)
在“Create Git Repository”弹窗中,会默认选中当前项目,此时只需要点击“OK”,即可将该项目初始化为 Git 本地库。
8.3.3、确认初始化本地库已成功
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/qtalivyg_1skn.png)
如上图所示,在项目的文件夹中,已存在“.git”子文件夹,说明该项目已成功被 Git 所管理到。
注意:如果 8.1 节的忽略规则文件的配置操作是成功的话,在“.diea”目录中是没有".gitignore"的;
否则,IDEA 会在“.diea”目录中,自动生成一个该项目的忽略规则配置文件".gitignore",在这个文件中也可以配置要 Git 忽略的文件。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/lhrddslb_znwi.png)
如上图所示,文件名是红色,说明该文件已被 Git 检测到,但是还没被 Git 追踪(即该文件还没被添加到暂存区)。
8.4、添加到暂存区
注意:必须先初始化本地库后,才能将文件添加到暂存区。
8.4.1、将某个文件添加到暂存区
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/rpqpafkw_73km.png)
如上图所示,右击要添加到暂存区的文件,在菜单栏里选择“Git”->“+Add”,即可将该文件添加到暂存区。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/tkbyvavi_w4o3.png)
如上图所示,将“pom.xml”文件添加到暂存区后,颜色变成了绿色,即说明该文件已成功被 Git 追踪,但还没有被提交到本地库。
注意:如果默认的文件状态颜色区分不明显,可以在“Settings”中自定义设置文件状态的颜色:
8.4.2、创建一个文件
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/uhmflyli_pbt5.png)
如上图所示,新创建了一个Java文件“GitTest”,此时 Idea 便会自动弹窗提示是否将这个新创建的文件加入暂存区。
注意:本例出于演示需要,点击了“Cancel”;在实际情况中,点击“Add”即可。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/tujpqrsc_tvrc.png)
如上图所示,虽然该 Java 文件还没加入暂存区,但是并不影响其编译运行使用。
注意:如果在编译运行时报错“Error:java: 错误: 不支持发行版本 5”,请参考该解决方案。
8.4.3、将整个项目添加到暂存区
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/rorsnaqb_d7qh.png)
如上图所示,右击要添加到暂存区的项目,在菜单栏里选择“Git”->“+Add”,即可将该项目所有文件(忽略文件除外)添加到暂存区。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/mmkqteyr_986e.png)
如上图所示,将整个项目添加到暂存区后,该项目所有文件(忽略文件除外)的颜色变成了绿色,即说明这些文件已成功被 Git 追踪,但还没有被提交到本地库。
8.5、提交到本地库
注意:必须先将文件添加到暂存区后,才能将文件提交到本地库。
8.5.1、第一次提交
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/pvzeefda_vuf9.png)
如上图所示,右击要提交到本地库的项目,在菜单栏里选择“Git”->“Commit Directory”,即可将该项目所有(已添加到暂存区的)文件提交到本地库。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/hytqrlvm_9wez.png)
如上图所示,在提交弹窗中,可以看到将要提交到本地库的文件有哪些,点击该文件还能看到具体内容。
在“Commit Message”中填写提交信息,然后点击“Commit”按钮,即可完成提交到本地库的操作。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/gqsgcpax_pmnt.png)
如上图所示,当文件被提交到本地库后,文件的颜色恢复为最原始的黑色。
8.5.2、第二次提交
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/ulexviha_5xbf.png)
如上图所示,已被 Git 追踪过的文件,经过修改内容后,文件颜色会变成蓝色。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/dvxdthye_xqec.png)
如上图所示,因为项目所有的文件在之前已被追踪过,所以可以将修改直接提交到本地库。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/gcetdval_k8t8.png)
如上图所示,在提交弹窗中,可以看到将要提交到本地库的文件有哪些变化。
在“Commit Message”中填写提交信息,然后点击“Commit”按钮,即可完成提交到本地库的操作。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/bwdcyeml_r0wx.png)
如上图所示,当修改后的文件被提交到本地库后,文件的颜色恢复为最原始的黑色。
8.5.3、第三次提交
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/dfqvzsdi_rjh2.png)
如上图所示,已被 Git 追踪过的文件,经过修改内容后,文件颜色会变成蓝色。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/qduzoavp_2ryv.png)
如上图所示,因为项目所有的文件在之前已被追踪过,所以可以将修改直接提交到本地库。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/tvcwdbff_mvjt.png)
如上图所示,在提交弹窗中,可以看到将要提交到本地库的文件有哪些变化。
在“Commit Message”中填写提交信息,然后点击“Commit”按钮,即可完成提交到本地库的操作。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/azjxacll_nwoi.png)
如上图所示,当修改后的文件被提交到本地库后,文件的颜色恢复为最原始的黑色。
8.6、切换版本
8.6.1、查看提交版本信息
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/fyxlvscm_wutt.png)
如上图所示,在 IDEA 底部的 “Version Control”->“Log”界面中,便可看到所有提交的列表,每次提交涉及到了哪些文件。
此外,还能看到分支指向哪个提交版本,HEAD 指针指向哪个分支。
在本例中,HEAD 指针指向 master 分支,master 分支指向第三次提交版本;因此工作区显示的是第三次提交的版本内容。
8.6.2、切换到其他的提交版本
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/tcdgubpw_brue.png)
如上图所示,右击要切换到的提交版本,再点击“ Checkout Revision '版本号' ”,即可切换到该版本。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/wcuboiip_n6p4.png)
如上图所示,点击切换版本后,IDEA 会在该版本创建一个临时匿名分支,HEAD 指针指向该临时匿名分支;因此工作区显示的是该版本的内容。
8.6.3、切换回原来的maser分支版本
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/rxuxmuss_vh0q.png)
如上图所示,右击 master 分支指向的提交版本,再点击“Checkout”->“master”,即可切换回原来的maser分支版本。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/vhitxyae_c1as.png)
如上图所示,切换回原来的maser分支版本后,HEAD 指针指向 master 分支,master 分支指向第三次提交版本;因此工作区显示的是第三次提交的版本内容。
注意:切换回原来的maser分支版本后,之前 IDEA 为其他版本创建(仅供回看目的)的临时匿名分支会被自动删除。
8.7、创建分支
8.7.1、方式一
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/wvctuuim_md9d.png)
如上图所示,右击要创建分支的项目,在菜单栏里选择“Git”->“Repository”->“Branches”,即可打开分支操作的弹窗。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/opcdqygb_4yuh.png)
如上图所示,在分支操作的弹窗中,可以选择执行三个操作:New Branch(创建新分支)、Checkout Tag or Revision(切换到其他分支)、Local Branches Rename(对分支重命名)。
注意:后续操作请参考方式二的。
8.7.2、方式二
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/josugcam_a37y.png)
如上图所示,IDEA 右下角有当前 Git 分支的名称,点击即可打开分支操作的弹窗。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/kjduczdn_038a.png)
如上图所示,在创建新分支的弹窗中,输入新分支的名称(本例为 hot-fix ,即热修复的意思),点击 OK 即可创建一个新分支。
“Checkout Branch”复选框是默认选中的,意思是创建新分支后,自动切换到新分支。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/jokmornq_ru29.png)
如上图所示,创建新分支成功后,IDEA 右下角当前 Git 分支名称是新分支的名称,且新分支和 master 分支指向了同样的提交版本。
8.8、切换分支
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/znlnxdsz_2dpz.png)
如上图所示,在分支操作的弹窗中,选中要切换到的分支名称,然后点击“Checkout”即可切换到该分支。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/sqmdnbbm_yp4k.png)
如上图所示,已成功切换到 master 分支。
8.9、正常合并分支
8.9.1、在hot-fix分支新增内容
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/hyywyqvr_ugfz.png)
如上图所示,在 hot-fix 分支中,新增了一行内容;经过修改内容后,文件颜色会变成蓝色。
8.9.2、提交hot-fix分支的新增内容
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/fqoeqpxz_kyb0.png)
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/lrjaqafc_dpir.png)
如上图所示,多了一个提交版本,且 hot-fix 分支指向该提交版本。
8.9.3、切换到master分支
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/qcfpaulk_v7xe.png)
如上图所示,HEAD 指向了 master 分支,表示现在切换到了 master 分支,这时在工作区已看不到 hot-fix 分支已提交的新增内容。
8.9.4、合并hot-fix分支到当前分支
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/vfoidjha_nhlo.png)
如上图所示,点击 IDEA 右下角当前 Git 分支名称,选择要合并的分支名称(本例为 hot-fix ),然后点击“Merge into Current”,即可将 hot-fix 分支合并到当前分支(本例为 master )。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/limuzgag_ctbp.png)
如上图所示,如果内容没有冲突,分支直接合并成功,分支合并成功以后,会自动提交,无需再手动提交到本地库。
8.10、冲突合并分支
8.10.1、在hot-fix分支新增内容
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/jakeozlk_drih.png)
如上图所示,在 hot-fix 分支中,新增了一行内容;经过修改内容后,文件颜色会变成蓝色。
8.10.2、提交hot-fix分支的新增内容
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/hwstqdyj_8s6i.png)
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/fifvwmyx_mc43.png)
如上图所示,多了一个提交版本,且 hot-fix 分支指向该提交版本。
8.10.3、在master分支新增内容
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/fazujide_g2mk.png)
如上图所示,切换到 master 分支中,新增了一行内容;经过修改内容后,文件颜色会变成蓝色。
8.10.4、提交master分支的新增内容
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/jwvupnnr_4xr7.png)
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/rijladlp_9wy9.png)
如上图所示,又多了一个提交版本,且 master 分支指向该提交版本。
注意:此时 hot-fix 分支和 master 分支分别对同一行做出了不同的修改。
8.10.5、合并hot-fix分支到当前分支
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/mtvxubyt_3e7n.png)
如上图所示,点击 IDEA 右下角当前 Git 分支名称,选择要合并的分支名称(本例为 hot-fix ),然后点击“Merge into Current”,即可将 hot-fix 分支合并到当前分支(本例为 master )。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/wpdnstjv_sf0h.png)
如上图所示,因为 hot-fix 分支和 master 分支分别对同一行做出了不同的修改,合并分支时,IDEA 不知道选择使用哪个分支的修改是正确的。
因此,需要手动处理 hot-fix 分支和 master 分支,存在冲突的内容。
8.10.6、解决合并冲突
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/dhdzigjk_v2mz.png)
如上图所示,在手动合并的弹窗中,左侧是 master 分支的内容,右侧是 hot-fix 分支的内容,中间是手动合并结果的内容。
左右两侧还有操作按钮:“X”、“>>”和“<<”;“X”表示不将这行冲突内容合并到结果内容中,“>>”和“<<”表示将这行冲突内容合并到结果内容中。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/fyzuigig_960e.png)
如上图所示,先后点击了“>>”和“<<”操作按钮,两个分支的冲突内容也按顺序地合并到结果内容中了。
此外,还出现了一个提示,表示冲突内容已被处理,可以完成合并;这时点击“Apply”按钮即可完成手动合并冲突的操作。
![](https://img.shuduke.com/static_img/cnblogs/blog/2052479/202405/vcuruplm_8xv8.png)
如上图所示,合并冲突已解决,且自动提交到了本地库。
本文来自博客园,作者:Javaer1995,转载请注明原文链接:https://www.cnblogs.com/Javaer1995/p/18203196