一位经验不足的用户更改了
大多数指导建议:
release
,然后合并到了dev
。糟糕,出现了合并冲突!合并状态显示了他们自己的有冲突的文件以及其他团队成员的所有修复。作为一个多疑和谨慎的用户,他们说:
现在,合并提交仅包含他们的更改,放弃了分支中的所有其他更改(可能是大量的工作)。他们将那些不是我的文件,我是否意外地改变了它们?啊哈,我应该
discard
它们!
dev
推送到上游,直到另一个团队成员注意到有问题才发现错误。大多数指导建议:
- 如果分支还没有被推送:
git reset
- 撤销合并:
git revert -m 1 <commitId>
。但这只会还原数据(也就是只还原了不幸用户的更改),而不是撤消历史记录。任何未来尝试进行merge
的操作都会忽略丢失的更改,因为历史记录意味着它们已经被集成了。 - 重写历史,使用
rebase
或reset
,然后跟随git push origin -f
。这意味着团队的其他成员必须将强制dev
分支同步。如果团队很大,或者错误没有被快速发现,或者存在复杂的CI工具-这将成为一个非常痛苦的练习。
git diff
不显示被放弃的更改,git revert
也无法撤销那些被放弃的更改。有没有更好的方法来防止和解决这个问题?