怎么修改别人网站内容(冲突的类型逻辑(合并/应用补丁)时产生冲突)

优采云 发布时间: 2021-12-18 19:06

  怎么修改别人网站内容(冲突的类型逻辑(合并/应用补丁)时产生冲突)

  冲突

  很多命令可能会冲突,但从根本上说,merge 和 patch(应用补丁)冲突。

  而rebase是重置baseline然后应用patch的过程,所以会有冲突。

  git pull会自动合并,repo sync会自动rebase,所以git pull和repo sync也会冲突。当然 git rebase 更不用说了。

  冲突类型

  逻辑冲突

  Git 的自动处理(合并/应用补丁)是成功的,但在逻辑上是有问题的。

  比如别人修改了文件名,我还是用了旧的文件名。在这种情况下,自动处理可以成功,但实际上存在问题。

  再比如,函数返回值的含义发生了变化,但我仍然使用旧的含义。这种情况自动处理成功,但可能隐藏了重大bug。这类问题主要是通过自动化测试来保证的。所以最好能写出更完整的自动化测试用例。

  这个冲突的解决方法是做一个BUG修正。没有真正解决 git 报告的冲突。

  内容冲突

  如果两个用户修改同一个文件的同一个区域,git会报内容冲突。这是我们经常做的,下面的解决方案主要针对这种冲突。

  树冲突

  由文件名修改引起的冲突称为树冲突。

  比如用户a将文件重命名为ac,用户b将同一个文件重命名为bc,那么b合并两次提交时就会发生冲突。

  $ git 状态

  我们添加: bc

  都删除了:origin-name.c

  由他们添加: ac

  如果最后决定使用bc,那么解决方法如下:

  git rm ac

  git rm origin-name.c

  git 添加 bc

  提交

  执行前两个git rms时,会提示“文件名:需要合并”,可以忽略。

  树冲突也可以用 git mergetool 解决,但整个解决过程是在交互式问答中完成的。使用 d 删除不需要的文件,使用 c 保留需要的文件。

  最后执行 git commit 提交。

  内容冲突解决

  发现冲突

  一般来说,发生冲突时会出现“CONFLICT”:

  $ git pull

  自动合并测试.txt

  CONFLICT(内容):合并 test.txt 中的冲突

  自动合并失败;修复冲突,然后提交结果。

  但是,也有例外。repo 同步错误可能不直接表示冲突,而是以下内容:

  错误:项目迷你/样本

  注意:不管有没有冲突,只要本地修改不是基于最新的服务器都可能报这个错误,解决方法是一样的。

  这时候需要进入报错的项目目录(git库),然后执行git rebase解决:

  git rebase 远程分支名称

  解决冲突的一般过程

  合并/补丁的冲突解决

  先编辑冲突,然后git commit提交。

  注意:对于 git 来说,编辑冲突与通常的修改代码没有区别。修改完成后,需要将修改添加到缓存中,然后提交。

  变基冲突解决

  rebase的冲突解决过程就是解决每个应用补丁冲突的过程。

  解决补丁应用冲突后,执行以下命令标记冲突已解决(即将修改后的内容添加到缓存中):

  git add -u

  注意:-u 表示将所有跟踪文件的新修改添加到缓存中,但不添加新文件。

  然后执行以下命令继续rebase:

  git rebase --continue

  如果继续解决冲突,请重复这些步骤,直到完成变基。

  如果遇到不需要应用的补丁,可以使用以下命令忽略:

  git rebase --skip

  如果想回到rebase执行前的状态,可以执行:

  git rebase --abort

  注意:rebase后不需要执行commit,也没有新的修改需要提交,都是git自动完成的。

  编辑冲突方法

  直接编辑冲突文件

  发生冲突后,文件系统中冲突文件(这里是test.txt)的内容会显示类似如下:

  a123

  > 6853e5ff961e684d3a6c02d4d06183b5ff330dcc

  C

  其中:冲突标签之间的内容是他人的修改。

  此时,还没有产生其他垃圾文件。

  编辑冲突最简单的方法是直接编辑冲突文件(test.txt),删除冲突标记,正确解决冲突。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线