[英]Is it possible to revise the resolution to a merge conflict in git?
我正在使用 git(使用 gitkraken)与合作者一起处理 tex 文件。 我们在同一个分支上工作,当我们中的一个人将我们的最新工作推送到该分支时,在某些时候出现了一些合并冲突。 从那以后,我们一直在处理这个文件,但我们意识到我们想要“重做”解决来自几次提交的合并冲突。
有没有干净的方法来做到这一点?
我想到的一件事是复制有问题的文件版本(只有一个感兴趣的文件),然后覆盖文件的当前版本,然后将该文件推送到当前分支,但恐怕这将覆盖自有问题的原始冲突以来的一些更改(我们希望保留)。 另一种方法是复制具有我们希望保留的某些更改的旧版本,然后使用差异工具有选择地合并我们希望更改的内容。
最后一个选项是我能想到的最好的方法。 有没有更好的办法?
每次提交——包括合并提交——只是保存所有文件的完整快照。
一旦你与其他人合作,通常不值得花很多精力回去“修复”以前的提交。 事实上,这在技术上是不可能的:你不能改变任何现有的提交。 您最终要做的是提供新的和改进的替代提交,以代替原始提交。 例如,假设:
...--I--J
\
M--N--O <-- branch (HEAD)
/
...--K--L
是当前的情况,即通过J
和L
现有提交合并为M
,并且您和他们已经在M
之上构建了N
和O
。 您现在发现由于某些冲突的错误解决,存储在合并提交M
中的快照中存在“错误”。
制作M
的更正版本的唯一方法是进行新的合并提交, M'
。 (有几种方法可以做到这一点。)结果是:
...--I--J__
| \
| M--N--O <-- branch
\ /
x
/ \
...--K--L---M' <-- newbranch (HEAD)
也就是说,即使您现在在这个新的替换分支newbranch
上进行了新的和改进的合并M'
,错误合并M
仍然存在。 您现在还需要将N
和O
复制到新的和改进的N'
和O'
:
...--I--J__
| \
| M--N--O <-- branch
\ /
x
/ \
...--K--L---M'-N'-O' <-- newbranch (HEAD)
现在你需要让每个人——你和其他人——停止使用旧链, MNO
如名称branch
,并开始使用新链, M'-N'-O'
。 在您的Git 中,您可以删除名称branch
并将newbranch
重命名为branch
。 在他们的Git 中,他们必须做同样的事情。 每个人都必须同时改变。 这往往需要大量工作。
承认过去有错误通常会更好。 在O
上进行新的提交以解决问题:
...--I--J
\
M--N--O--P <-- branch (HEAD)
/
...--K--L
每个人都可以像往常一样拿起新的提交P
并继续像往常一样工作。 当然,提交MNO
有糟糕的快照......但那又怎样? 坏事总是发生; 版本控制不是为了防止坏东西,而是让你纠正它。 你已经更正了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.