EP225:为什么 git revert 会导致冲突?

EP225:为什么 git revert 会导致冲突?

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

git revert 不重写历史,而是新建提交来撤销旧提交。若后续提交修改了相同代码行,就会产生冲突。解决步骤为:执行 git revert、手动修复冲突、暂存并继续,最终生成既撤销旧提交又保留后续改动的提交。

🔎

延伸解读

revert 与 reset 的关键区别

git revert 不会重写历史,而是创建一个新的提交来撤销旧提交的更改。这与 reset 不同,reset 会移动分支指针并可能丢弃提交。revert 的方式更安全,尤其适合共享分支,因为它保留了完整的历史记录,便于追踪和协作。

冲突产生的根本原因

当后续提交修改了与待撤销提交相同的代码行时,revert 就会产生冲突。例如,提交 C2 添加了某功能,而提交 C3 又修改了这些行,此时撤销 C2 就会与 C3 的更改碰撞。Git 无法自动判断应该保留哪个版本,因此需要人工介入解决。

解决冲突的标准流程

解决 revert 冲突的步骤是:首先执行 git revert 命令,Git 会在冲突处暂停;然后手动编辑文件解决冲突;接着用 git add 暂存已解决的文件;最后执行 git revert --continue 完成操作。这样会生成一个新提交,既撤销了旧提交的更改,又保留了后续提交的修改。

Q&A

git revert 和 git reset 有什么区别?

git revert 不会重写历史,而是创建一个新的提交来撤销之前的提交;git reset 则会重写历史。因此 revert 更安全,适合共享分支。

为什么 git revert 会产生冲突?

当后续提交修改了与被撤销提交相同的代码行时,git revert 就会产生冲突。因为 Git 无法确定哪个版本是正确的,所以会触发冲突。

如何解决 git revert 冲突?

解决步骤:1. 运行 git revert <commit>;2. Git 遇到冲突会暂停;3. 手动修复文件;4. 暂存修改;5. 继续 revert。最终会生成一个新提交,既撤销了旧提交又保留了后续改动。

git revert 会重写历史吗?

不会。git revert 不会重写历史,而是创建一个新的提交来撤销之前的提交,从而保持历史清晰、可追踪,并且对共享分支安全。

git revert 冲突后如何继续操作?

手动修复冲突文件后,使用 git add 暂存修改,然后运行 git revert --continue 继续完成 revert 操作。

git revert 冲突时 Git 会怎么做?

当 git revert 遇到冲突时,Git 会暂停操作,并提示用户手动解决冲突。解决后需要暂存文件并继续 revert。

🏷️

标签

➡️

继续阅读