git - git revert 是如何工作的
问题描述
我有一个包含以下提交历史的文件:
$git log --oneline
49740e5 3: Third version
796a330 2: Second version
539aa76 1: First version
647d060 file C creation
在每个版本中,我只是在我的文件中添加了一个文本字符串。我虽然如果我恢复“796a330 2:第二版”git会自动生成一个恢复提交,我会得到这样的东西:
3: Third version
1: First version
file C creation
但实际上这个动作不是自动的,我有一个合并冲突要解决。为什么?
解决方案
使用git revert 796a330
,796a330 2
不会从日志中消失。相反,创建了另一个提交,它尝试应用 on 的反向796a330 2
补丁49740e5 3
。
至于冲突,这里有一个例子。假设 in539a76 1
C
为空。然后在 中796a330 2
,添加了一行hello\n
。然后在 中49740e5 3
,该行被替换为world\n
。
的补丁796a330 2
是从无到hello\n
,的补丁49740e5 3
是从hello\n
到world\n
。的反转补丁796a330 2
是hello\n
从无到有。当将反转的补丁应用到 上49740e5 3
时,它无法像only has一样找到hello\n
。所以它报告了冲突。C
C
world\n
换句话说, 的变化49740e5 3
依赖于796a330 2
的变化。如果您想在796a330 2
没有冲突的情况下还原 的更改,则需要先还原49740e5 3
。如果这两组变化是独立的,git revert 796a330
在这种情况下不会引起冲突。
冲突不是错误。您可以通过保留您想要的代码并删除您不需要的代码来解决它们。应始终删除冲突的标记。
推荐阅读
- reactjs - React.js 中的点模式
- java - Payara/Hazelcast 实例对象层次结构
- javascript - 网页初始加载时从扩展到网页的数据 - Firefox
- node.js - 如何返回充满邮件内容的数组?
- flutter - 使用 SMTP 使用 Flutter 发送电子邮件
- python - 尝试在 heroku 上部署 react-flask 应用程序时崩溃应用程序错误
- firebase - 使用 Firebase 从不同的集合中获取数据,并在数据更改时更新 UI
- c# - 如何从 C++ 头文件中检索信息
- c# - WebException 操作在 100 秒后超时 C#
- c# - 正确启动多线程c#执行