JetBrains Git 为啥这么顺手?

探索 JetBrains 里 git pull 的便捷体验

git pull 的默认行为实际上是执行 git fetch 加上 git merge,但这仅在需要合并的情况下发生

如果远程分支的更新与你本地分支的提交没有冲突, GoLand 在执行 git pull 时,会直接快进合并(fast-forward merge)git pull 会表现为直接更新 HEAD 到远程分支的最新提交,而不会创建一个额外的合并提交

所以你不会看到诸如此类的 commit:Merge remote-tracking branch 'origin/feat-v2.32' into feat-v2.32

你也可以在命令行中直接执行快进合并:

# 拉取远程更新
git fetch origin

# 执行快进合并,如果无法快进合并,就报错
git merge --ff-only origin/feat-v2.32

相反,如果本地代码和远程代码存在冲突或不同步的提交时,GoLand 会像常规的 git pull 操作一样,先执行 git fetch 然后再 git merge,并会提示用户解决冲突

GoLand 在执行 git merge 操作发生冲突后,通常有 3 个操作步骤:

# 执行合并,遇到冲突会停止
git merge origin/feat_v2.32_1128

# 开发介入,解决冲突...

# 标记已解决的冲突文件
git add <resolved-files>

# 提交合并,生成合并提交
git commit

解析:

  1. git merge:尝试合并目标分支。如果存在冲突,它会标记冲突文件
  2. git add:标记已解决的冲突文件
  3. git commit:提交合并,生成合并提交。 在这一步里,Git 会自动生成合并提交消息,类似 Merge remote-tracking branch 'origin/feat_v2.32_1128' into feat_v2.32_1128