内容提要
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。