查看这行代码是谁改的
在编辑器左侧右键,选择 Annotate with Git Blame
点击 左侧时间会在弹出的子窗口中显示这次修改的 hash,提交评论,和同步修改的文件有哪些
复现代码冲突
这里需要重点讲一下,因为我最近居然发现我们的同事居然还是用非常原始的方式解决冲突,就是一个文件一个文件的删除 ======= 这个。当时我看见的时候,我自己都惊呆了。
我们先手动的制造一个冲突
mkdir test;
cd test;
git init -y;
echo ‘console.info(“one line”)’ > index.js;
git add .; git commit -m ‘init’;
git checkout -B feature/two;
vim index.js; # 在第二行添加 console.info(“two line”)
git add index.js; git commit -m ‘feat: two line’;
git branch master;
创建分支 3
git checkout -B feature/three;
vim index.js; # 在第二行添加 console.info(“three line”)
git add index.js; git commit -m ‘feat: three line’;
git checkout master
merge feature/two
git merge feature/two # 这个时候不会发生冲突
git merge feature/threee # 冲突发生
上图展示了发生冲突的所有过程
解决冲突
上面我们已经制造出了一个冲突,这个时候我们通过 Inteillj Idea 自带的 Version Controller 的功能来处理这个冲突。
直接在编辑器中打开冲突文件夹
这里会有一个问题,就是在真正的项目场景下,项目文件非常的多。
在项目文件上右键,选择 Git,选择 Resolve Conflicts
点击之后会弹出一个处理冲突的弹窗。接下来好好介绍一下这个弹窗
- 待合并分支
- 当前分支
- 冲突的文件列表
- 全部以当前分支「master」为准,丢弃待合并「feature/three」分支冲突文件
- 全部以待合并分支「feature/three」为准,丢弃当前分支「master」冲突文件
- 点击 merge 会打开一个子窗口合并明细
- 双击文件和打开一个子窗口进行代码 merge 明细
- 显示了合并分支文件状态,上图标识合并的两个分支 文件都是更新状态
- 以分组列表的形式展示
这里就进入到详细的单文件合并步骤了
- 1️⃣ 当前分支的修改
- 2️⃣ 合并区域
- 3️⃣ 待合并分支的修改
- 4️⃣ 显示本次合并的明细,就是看除了当前文件还有哪些文件需要合并
- 5️⃣ 将左侧
console.info("two line")
合并 - 6️⃣ 将右侧
console.info("three line")
合并 - 7️⃣ 直接接受左侧的代码
- 8️⃣ 直接接受右侧的代码
- 9️⃣ 引用合并的内容
查看代码历史
点击 Show History
点击 Show History 之后底部会弹出当前项目的历史提交记录
- 1️⃣ 这里显示的当前项目的提交记录
- 2️⃣ 可以指定想要查看历史记录的分支
- 3️⃣ 可以选择只看某个人的提交记录
- 4️⃣ 时间赛选
- 5️⃣ 选中左侧的提交记录,这里会展示此次变更了哪些文件,双击文件会在弹出的新窗口中显示代码变更情况
上面是直接选中的整个项目查看整个项目的历史提交记录,有的时候我们只想查看某个文件夹,或者是某个文件的代码变更记录。整个时候我们只需要在对应的文件夹或者文件上右键悬着即可。
分支创建
根据实际工作场景出发,先列举一下会创建分支的集中情况。在实际的应用场景来看如果用 Idea 来解决。
- 开发新功能,我们需要从现有分支创建新的 feature 分支
- 我们正在开发 feature 分支,但是此时线上出 Bug,我们需要从 master 分支创建 hotfix 分支来修复
- 我们在浏览源代码,我们浏览代码历史上某个版本的代码
从现有分支创建新的 feature 分支,这是最简单的,甚至都不需要用 idea 了,代码也是一行搞定 git checkout -B feature/xxx
直接从项目上直接右键创建即可
- 我们正在开发 feature 分支,但是此时线上出 Bug,我们需要从 master 分支创建 hotfix 分支来修复
这种情况其实是正式项目中的常态吧,毕竟线上环境是复杂的,问题随时都会发生。但是问题就是可能我们现在开发的 feature 分支还没有开发完成,我们自己也不想用 commit 进行提交。这个时候就需要用到 git 的 stash 功能了。
在切换前先 Stash Changes,将目前修改的代码暂存
在弹窗中给这次暂存添加 备注 然后点击 create stash
在处理好 stash 之后我们需要切回到 master 分支去创建对应的 hotfix 分支
点击 Branchs
选择 master 分支进行切换,切换后创建对应 hotfix 分支,在修复好 hotfix 分之后,我们需要回到对应的 feature 分支继续开发未开发完成的功能。
选择 Unstash Changes
这里会有自己存储的 stash 历史,点击 apply stash 进行恢复
- 我们在浏览源代码,我们浏览代码历史上某个版本的代码
添加修改「git add xxx」
我们每次新增的代码需要通过 git add xxx 命令将代码从工作区添加到缓存区
上面的 add.js 文件是我们新添加的文件
提交修改「git commit xxx」
点击 Commit Directory
🐶 本次 commit 的文件列表
🐱 文件修改了,但是没有在缓存区的文件
🐭 修改列表,我们可以为某个代码文件集合专门命名 change list
🐹 作者
🐰 Amend commit
🦊 Sign off commit
🦝 在提交之前 格式化代码
🐻 Rearrange 代码
🐼 优化 imports,在代码中没有使用的 package 会自动删除
🦘 分析代码,如果有代码异常会提示
🦡 简单代码有没有 TODO 没有完成会提示
🐨 优化代码
🐯 更新 copy right
🦁 提交的 message
🐮 上下选择看其他文件的变动
🐷 选中文件的代码变动
🐽 commit
推送代码 「git push」
拉取代码「git pull xxx」
在便捷一点
其实上面介绍的基本上就涵盖了我们日常项目中大部分使用的功能了,但是可以看到我们在上面演示的操作基本上不是在文件夹上右键菜单来选择,但是说实话不是太跟手,用起来很麻烦。
其实 Jetbrains 的开发人员应该也是考虑到了这一点,其实在软件的界面中有很多位置可以操作 Git
❤️ 拉取代码
🧡 提交代码
💛 推送代码
💚 查看历史
💙 rollback
点击下方的版本号,也可以看到所有本地的分支和远程的分支,可以在这里进行分支合并,和远程代码更新。
在快一点 VCS Operations
代码的更新与提交提示是一个非常高频的操作,它值得拥有更加便捷的方式,Jetbranins 也提供了更加编辑的方式
Mac: ctrl + v
上面提到的所有的操作 在这里都提供了便捷的操作方式
- Commit
- Rollback
- Show History
- Annotate With Git Blame
- Show Diff
- Branches …
- Push …
- Stash Changes …
- UnStash Changes …
这里不仅可以用 Git 的功能,还有 Idea 自己的 Local History 也背展示在了这里
一些快捷键
正常编码的情况下 使用快捷键的方式肯定更快,一下是针对 Git 操作整理的快捷键
|
名称
|
对应 Git 操作
|
快捷键「Mac」
|
|
将文件添加到工作区
|
git add xxx
|
Option + Command + A
|
|
将工作区文件添加至缓存区
|
git commit xxx
|
Command + K
|
|
拉去远程代码
|
git pull xxx
|
Command + T
|
|
推送代码到远程仓库
|
git push xxx
|
Command + Shift + K
|
|
暂存文件
|
git stash xxx
|
Ctrl + V -> Stash
|
|
恢复暂存
|
git stath pop
|
Ctrl + V -> Un Stash
|
|
删除掉缓冲区修改
|
git reset —hard ^
|
Command + Shift + Z
|
|
解决冲突
|
|
Ctrl + V -> Resolve Conflicts…
|