1. 本地安装 Git
不过这个地址一般下不动,我们可以选择在腾讯软件中心下载,速度很快。

接着就是安装了,一直点击Next即可,使用默认安装。这个页面选择git使用的命令行,建议使用第一个git自带的即可。

接着需要设置git的用户名和邮箱,这个用户名会显示在提交历史中。打开git-base.exe,这里需要执行两个命令,一般直接设置全局的即可:
--修改当前项目用户名和密码:
git config user.name "username"
git config user.email "email"
--修改完毕查看一下:
git config user.name
git config user.email
--修改全局用户名和密码:
git config --global user.name "Your Name Here"
git config --global user.email "your_email@example.com"
--修改完毕查看一下:
git config --global user.name
git config --global user.email
如果这里没进行设置,会在你第一次提交的时候提示你设置:

接下来可以设置下环境变量:
我的电脑右键 =》属性 =》高级系统设置 =》系统属性(高级)=》 环境变量
我的 Git 安装在D:\Program\Git目录,那么我在 Path 中添加的路径就是D:\Program\Git\cmd。
如果环境变量未正确配置,CMD 命令行窗口输入 git 命令行会报错,系统将无法正确识别 git 命令。
2. IDEA 配置 Git
使用的IDEA版本为2019.2,首先需要在本地安装Git软件,然后在Settings选项中配置Git安装路径,点击Test进行测试。

3. 首次检出项目
首次检出需要在 IDEA 顶部工具栏选择VCS--->Checkout from Version Control--->Git。

然后在URL填写上公司GitLab中目标项目远端地址,目录Directory注意填写到具体的项目名(图片上的是错的,应该是D:\IdeaProjects\udesk_cem)点击Test,接下来会提示输入用户名和密码。

填写好用户名和密码后,如果正确,会提示连接成功,接着点击克隆,将远端项目检出到本地。

这是首次检出的过程,之后的每次检出就不需要这么麻烦了,直接在IDEA右下角的分支列表进行操作即可。
4. 项目分支创建
可以在右下角的分支列表上方选择+New Breach新建分支,新建的分支是基于当前所在分支的代码的。所以在新建分支之前可以先切换到想要作为基础版本代码的分支,再进行创建分支操作。


5. 项目分支切换
可以直接在右下角的分支列表中选择需要切换的分支,直接鼠标左键点击,选择想要切换的分支。切换完毕会在右下角显示当前所处的分支名称。
(1)本地分支Local Branches的检出切换选择Checkout。

(2)远端分支Remote Branches的检出选择Checkout As...,新的分支名称不需要修改,默认和远端分支名称一致。点击OK即可。


6. 项目刷新分支
有时候右下角的分支列表里没有想要检出的分支,也就是说你本地显示的远端分支列表和GitLab远端分支列表不同步,这时只需要点击顶部工具栏的VCS--->Git--->Fetch(取来)进行重新拉取即可实现右下角远端分支列表的刷新。

7. 分支代码提交
在开发分支上开发完毕后,可进行代码提交,先提交(Commit)到开发分支的本地仓库,再推送(Push)到开发分支的远端仓库。
首先进行Commit操作,在项目上右键--->Git--->Commit--->Directory...,可以在弹出界面查看本次提交的文件,可以添加提交信息,还可以在右下角选择提交选项。默认是Commit,也就是只提交到开发分支的本地仓库,还有一个选项是Commit And Push...表示会将Commit操作和Push操作连起来,在Commit完毕后会接着提示你进行Push操作,也就是推送到开发分支的远端仓库。

也可以在IDEA下方选项卡Version Control的Local Changes菜单下选中要提交的文件进行Commit,也可以右键Default Changelist,选择Commit)


接下来进行Push操作,可以选择直接在项目上右键--->Git--->Repository--->Push。注意不要勾选弹出框左下角的Push Tags,否则会推送到所有远端分支。注意检查弹出框的左上角的远端分支名称是否正确。


8. 开发分支合并主分支代码
本地分支为开发分支。将主分支的代码合并到开发分支上。
在开发分支上开发完成后,需要进行测试。但是在开发期间,可能其他同事已经在主分支上提交了代码,这时就需要rebase主分支的提交内容到开发分支上。
(1)首先rebase主分支远端仓库代码到开发分支的本地仓库。注意需要在右下角的分支列表中选择远端分支的主分支仓库进行rebase,这样是为了rebase到最新的主分支内容。Rebase Current Onto Selected是将当前重设为选定的意思。

(2)如果有代码冲突,会有弹窗提示进行代码合并和冲突处理。处理完后进行再次提交,最后需要进行强推到远端,对开发分支远端仓库的提交记录进行覆盖。(这个注意一定要强推,否则提交记录会出现分叉)。

9. 主分支合并开发分支代码
本地分支为主分支。将开发分支的代码合并到主分支上,最后使用主分支进行上线。
(1)首先切换本地分支为主分支,同步主分支远程仓库的最新代码到本地。
项目右键--->Git--->Repository--->Pull

(2)接下来rebase开发分支远端仓库代码到主分支本地仓库。

(3)进行push操作,将主分支的本地仓库代码推送到主分支的远端仓库。(这里不需要使用强推)
10. 代码提交记录进行合并操作
选中需要合并的记录,右键选择Interactively Rebase from Here(交互式地从这里重新建立基地)

除了第一个选中的开始节点选择pick外,其他节点选择squash(压缩)。

接下来写上压缩后的提交记录描述。点击Resume Rebasing(重新开始),最后把压缩完的提交记录force push到远端即可。

有时合并的过程中放弃了,会显示一直处于Rebase中,这时可以直接点击右下角分支列表中的Abort Rebase,中止Rebase操作。

操作过程示例:
目标: 对多次提交记录进行合并。
(1)比如我需要把2号提交合并到1号提交中,也就是把这两合并为一条提交记录。直接在1号提交上右键,选择Interactively Rebase from Here(交互式地从这里重新建立基地)

(2)接着会弹出Rebasing Commits窗口,将2号提交选为squash(压缩),点击Start Rebasing。

(3)接这会他弹出Additional Rebase Input(重新输入描述信息)窗口,这里可以填写上压缩合并后提交记录的描述信息。点击Resume Rebasing(重新开始)

(4)接下来如果你压缩的是远端的提交记录,则需要进行force push(强推)到远端;如果压缩的只是本地的提交记录,则直接正常push即可。
注意,Action 有以下几种选项:
pick(选择) / edit(编辑) / skip(略过) / squash(压缩) / reword(重述) / fixup(修正)
- pick 就是 cherry-pick。
- reword 就是在 cherry-pick 的同时你可以编辑 commit message,它会在执行的时候跳出一个界面让你编辑信息,当你退出的时候,会继续执行命令
- edit 麻烦点,cherry-pick 同时 ,会停止,让你编辑信息,完了后,你要用 git rebase --continue 命令继续执行,相对上面来说有点麻烦,感觉没必要啊。
- squash,合并此条记录到前一个记录中,并把 commit message 也合并进去 。
- fixup ,合并此条记录到前一个记录中,但是忽略此条 commit message。
这种操作需要合并的提交是连续的,一般用于把同一个开发任务的多次连续提交合并为一次提交。我试了下面这种不连续的提交记录合并操作,这样操作的话会把2号提交合并到它上面的那个提交中(也就是图中的“CSE-6:修改客户获取方式”),并没有合并到1号提交中。


把2号提交记录合并到1号提交记录:


11. 常用操作的快捷方式
如果你使用的是 Git 管理项目,每次更新远端仓库代码都需要选中项目名--->Git--->Repository--->Pull...,操作比较麻烦,可以直接使用Ctrl+T快捷键,该快捷键可直接从 Git 更新项目,免去了多次点击选择 Pull 的操作。注意弹出框选择 Rebase 。同样,Ctrl+K能直接进行项目提交,免去了多次选择进行提交的操作。

使用 Ctrl+` 可直接显示版本控制中的常用操作菜单。可看到一些常用的快捷键。

使用 F4 可以直接打开提交记录中的文件,进行编辑。

12. 开发分支部分合并到主分支
使用到Cherry-Pick。
目标:将develop分支的部分提交记录合并到master分支。
(1)首先切换到需要进行代码合并操作的分支,比如我们是master分支。

此时的Version Control中的Log下的Branch选择的是All,表示显示的是所有分支的提交记录,应该可以看到好多的分叉记录。

(2)将Log下的Branch切换到所要合并的代码所在的分支。比如我们是develop分支。
鼠标左键点击Branch,点击origin/...,会出现远端所有分支的列表,在列表中选择目标分支即可。

这里选中develop分支,此时Log下显示的就是develop分支的所有提交记录了。

(3)接着就可以直接按住Ctrl,选择需要合并的提交记录了,选中后右键,选择Cherry-Pick即可。后续就是正常的处理冲突和提交流程了。

13. 主分支被强推的解决办法
需要使用到Reset Current Branch to Here...。
如果有人强推了主分支,此时我们本地的就无法提交,会产生冲突。
(1)这时如果本地没有其他修改,可以直接删除本地代码,重新检出。
(2)还可以询问下同事强推的记录开始的地方,我们可以做一个回退。也就是在提交记录中右键具体的提交记录,选择“将当前分支重置到这里”来实现。之后再进行一次 Push 即可。


翻译一下这个界面:
Thie will reset the current branch head to the selected commit, and update the working tree and the index according to the selected mode.
将当前的分支头重置为所选的提交,并根据所选模式更新工作树和索引。
Soft:File will not change, differences will be staged for commit.
文件将不会更改,差异将暂存以提交。
Mixed:File will not change, differences will not be staged.
文件将不会改变,差异将不会暂存。
Hard:File will be reverted to the state of the selected commit. Waring: any local changes will be lost.
文件将恢复到所选提交的状态。警告:本地的所有改变都将丢失。
Keep:File will be reverted to the state of the selected commit. but local changes will be kept intact.
文件将恢复到所选提交的状态。本地的改变将会被保留。
14. 移除被添加到版本管理的文件
场景:有文件手误操作添加到了版本管理,如下图中的 mvnw 文件。

现在想要将该文件从被管理文件中删除,图形界面没有找到操作方法,只能通过命令行来操作了:
D:\WorkGroup\IdeaProjects\data-search>D:\WorkGroup\Git\bin\git rm --cache -r mvnw
rm 'mvnw'
D:\WorkGroup\IdeaProjects\data-search>
可以发现,mvnw 文件已经在未进行版本管理的文件列表中了。

无关内容:对于没有.git目录的文件夹下,会有以下提示,直接使用git init就可以了。
D:\WorkGroup\Git\bin>git rm --cache -r .mvn
fatal: not a git repository (or any of the parent directories): .git
D:\WorkGroup\Git\bin>git init
Initialized empty Git repository in D:/WorkGroup/Git/.git/
D:\WorkGroup\Git\bin>
15. IntelliJ IDEA 使用 Git 慢的问题
最近公司给开发机断网了,就是说不能连接外网了,然后我就发现我的 IDEA 中执行 Git 相关的操作的时候特别的慢,很是抓狂。断网前不是这样的,执行很快的。
按照下面方法,直接改了 IDEA 安装目录下的 bin 目录下的那两个文件的后缀。
起因 在公司电脑上使用 IntelliJ IDEA 的时候发现操作 Git 特别的慢,status、fetch、pull、checkout、commit 等基础操作都执行的特别慢,下方的 Task 进度条一直处于等待中,等待差不多 10 秒多的时候才开始执行进度。最难以忍受的是,在 Settings 里面检查 Git 的版本操作都需要接近 20 多秒的时间,才能返回结果。
结论 花了几天时间跟踪 IDEA 的执行日志以及翻看 IDEA Git 插件的源码,偶然发现 IDEA 在执行 Git 命令的时候,其实是调用了一个 exe 程序来执行命令的,问题就出在这个 exe 程序上面,猜测应该是公司给初始化的系统本身有什么域设置不合理导致在我这个系统版本执行的特别慢,就像是队列里面排队等候一样,最终试着把这个 exe 改了后缀名,问题就解决了。
解决方法 昨天公司看到有小伙伴在大群里问运维同事能不能处理一下这个问题,我突然意识到居然不止我一个人遇到了这个问题,所以分享到知乎上,供遇到这个问题的朋友们参考。
处理方案:只需要删除掉 JetBrains 系 IDE 安装目录下的 runnerw.exe(64 位系统是 runnerw64.exe)或者直接更改后缀名,反正只要让 IDE 找不到这个 exe 就可以,然后这个问题就解决了。不需要重启 IDE ,即时生效,如果你使用的是 JetBrains ToolBox 来安装升级 IDE 的话,每次 IDE 更新,你都需要重新去屏蔽那两个文件;如果是官网下载安装包安装的,改一次就行了。
我的这两文件是在下面目录中:
D:\work\IntelliJ IDEA 2021.1.2\bin

关于 Toolbox
如果你是 Toolbox 安装的 IDE,要找到 IDE 的安装目录的话,你可以在开始菜单搜索 IDE 快捷方式右键"打开文件所在的位置";也可以直接在 Toolbox 里找到你的 IDE,然后点击右侧的"三个点"更多菜单,里面选择"Settings"进入 IDE 设置,依次点击"Configuration"展开选项,找到"Install lacation",可以直接复制安装路径,或者点击下方的"Show..."直接打开安装目录。
后续
已确认,卡顿和执行慢的根源是某些钩子程序,我这边的是"IP Guard"导致。
如果你是公司电脑,按照上面提到的方法处理就行,毕竟公司的没办法。
如果你是自己私人电脑,那就想办法删掉这个"IP Guard"吧,这个玩意是用来监控你的电脑的,有些公司是强制要求,然后通过域设置推送到你的计算机上的,那就不能删除。如果是私人电脑,百度一下怎么删除,按照文章,一般是通过 pe 进去,然后删掉那些文件就行了。
关于如何查看你的电脑是否也被"IP Guard"所支配,去看看你 C 盘系统目录就知道啦,具体路径的话,看看有没有"winrdlv3.exe"这个程序就好了,参考路径如下:
C:\Windows\System32\winrdlv3.exe
C:\Windows\SysWOW64\winrdlv3.exe
16. 本地新建项目添加 Git 管理

如果有远程仓库,提交的时候配置远端地址即可。
17. 分支重命名
如果一个分支需要重命名为另一个名称,比如说我有个 Git 分支 hotfix-12345,本地和远端都有这个分支,我需要重命名为 feature-1.8.2,则可以先在本地分支上进行重命名为 feature-1.8.2,然后点击推送,在下面红框的地方显示的还会是远端的 hotfix-12345,此时可以直接在这里进行一个远端分支名称修改,改为 feature-1.8.2(会显示新建图标),然后推送,成功后,直接把远端的 hotfix-12345 分支删掉,这样下次推送的时候红框处就不会显示旧的分支名称了。
在更新的时候还需要设置上游分支,否则会提示没有跟踪的分支。
18. 远程仓库管理
可以看到当前项目在 GitHub 和 GitLab 上的远程仓库:
19. 将 GitHub 上的分支推送到 GitLab
公司有一个项目,在 GitHub 和 GitLab 上都有,但是版本不一致,现在需要将 GitHub 上该项目的一个分支 A 推送到 GitLab 上,成为 B 分支。
选择远端仓库,填写对应分支:
没有对应的远端,首先我们定义一个 gitlab 的远端仓库(其实 gitlab 上对应项目已经存在,这里只是将本地和远程 gitlab 仓库做一个关联),
加完之后,在远程仓库管理就能看到这个新的 origin-gitlab 仓库了。选择好远端和分支,直接推送即可。
20. 搁置更改和取消搁置
有时候,我们在 A 分支开发了一部分代码,但是未开发完,不适合提交到 Git,但是此时,有其他需求需要切换到 B 分支,比如查询个代码或者什么的,那这些修改的代码可能在切换过程中出现冲突的问题,此时我们可以选择使用搁置功能。
选中未提交代码,右键,选择搁置更改,这样在提交 Tab 右边的搁置 Tab 下就能看到刚才的代码。此时切换 B 分支就不会有什么冲突了。
等处理完问题,我们切回了 A 分支,此时在搁置 Tab 下选中未提交代码,右键,选择取消搁置,则代码恢复到提交 Tab 下,我们可以继续进行开发。