Git冲突分析和处理


本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://oldratlee.com/post/2013-02-17/git-conflict

一同事使用git pull冲突了,并且之前本地有未提交的修改。

问题变得比较复杂,因为涉及4方面:

  • 工作目录的修改
  • 暂存区的修改
  • merge来的修改
  • Merge前的修改

解决方法:

使用git merge --abort中止merge。merge manual中说,这条命令会尽力恢复到Merge之前的状态(可能失败!)。

merge manual中有一条警告:

Warning: Running git merge with uncommitted changes is discouraged: while possible, it leaves you in a state that is hard to back out of in the case of a conflict.

上面的内容就是说:有未提交修改情况下,不要执行merge!遵守这条警告,防患于未然是最好。

遵守这条警告(或说是最佳实践)后,就只有两方面:

  • merge来的修改
  • Merge前的修改

关于这种情况下的冲突解决,《Git权限指南》一书中有比较系统的说明。

这条警告说得更通用些,就是

有未提交修改情况下,不要执行可能会冲突的操作!

哪些操作会导致冲突呢?

冲突的来源

很多命令都可能出现冲突。但冲突的直接来源是mergepatch(应用补丁)。其它的命令是执行这两个操作导致冲突。

  • rebase:重新设置基准,然后应用补丁。
  • pull:会自动merge
  • repo sync:会自动rebase
  • cherry-pick:会应用补丁
  • ……

最佳实践

在执行可能有冲突的操作前,先查看一下 暂存区 和 工作目录,保证其中没有修改。

比如使用git stash就可以把暂存区 和 工作目录的修改保存起来,让暂存区 和 工作目录处于干净的状态。

遗留的的问题

如果上面最佳实践是合理的,那么应该加上Hook,在执行在执行可能有冲突的操作时,检查是否有没提交的修改。如果有,则给出警告终止操作!

参考资料

Why Complex is Easy, Simple is Hard

所属标签: git冲突mergerebase合并patch补丁,

### 如何在 PyCharm 中解决 Git 代码冲突 #### 解决冲突前的准备 为了更好地理解如何处理冲突,了解何时会发生冲突是有帮助的。通常情况下,当多个开发者在同一文件的不同分支上修改同一部分代码时,可能会发生冲突[^2]。 #### 查看冲突状态 一旦执行 `git merge` 或者 `git rebase` 命令之后,如果有任何无法自动解析的情况存在,则会被标记为冲突。此时,Git 将会在受影响的文件中标记出具体位置,并暂停操作直到这些问题被人工干预解决为止[^4]。 #### 使用PyCharm内置工具查看编辑冲突文件 PyCharm提供了直观的方式让用户能够轻松识别哪些地方发生了分歧以及提供了一个图形化的界面来辅助完成合并工作。对于每一个处于冲突状态下的文件,IDE都会显示特殊的图标提醒用户注意;双击该文件可以打开专门用于解决冲突的工作区,在这里可以看到来自不同源的变化并允许逐行选择保留哪一方的内容或是自定义最终版本[^1]。 #### 应用解决方案 在这个专用窗口里,左侧代表当前分支上的改动(通常是HEAD),右侧则是试图合并进来的新变化(比如另一个分支或者是远程仓库里的更新)。中间区域展示了两者的共同祖先版本以便于对比分析。通过简单的拖拽或者点击按钮就可以接受某一边的全部变更或将特定行加入到结果文档中去。此外还有高级选项支持更复杂的场景下定制化调整。 #### 完成交互过程 做出所有必要的决定后保存所做的更改即完成了单个文件级别的冲突解决流程。重复上述步骤直至所有的冲突都被妥善处置完毕。最后提交这次合并不再含有未解争议的状态给版本控制系统确认整个事务结束[^3]。 ```bash # 当所有冲突都已解决后,可以通过以下命令继续之前中断的操作 git add . git commit ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值