如何在进行更改后伪造文件合并?

时间:2017-04-01 12:55:16

标签: git

我在我的项目中粘贴了另一个版本的文件,它有添加和删除。我想假装合并到当前提交的版本,这样我就可以比通过眼睛比较文件更容易地看到和解决冲突。

如何启动将修改后的文件(工作树)合并到同一文件的HEAD版本中?

config/routes.rb # (1) commited version HEAD
config/routes.rb # (2) modified version in working tree

我已将(2)config/routes.rb从我朋友发送给我的文件粘贴到我现有的路径文件(1)中。

由于

1 个答案:

答案 0 :(得分:3)

为了真正"合并"两个文件,你需要一个" base"它们都来自的版本。否则,计算机无法区分一个文件中的添加和另一个文件中的删除之间的区别,因此它无法判断哪个版本更新并且无法进行任何自动更改(即,每一次改变都是冲突)。例如:

file1:
...
here is a line
this line was added in file 1, or was it deleted in file 2?
here's the next line
...

file2:
...
here is a line
here's the next line
...

如果没有基本文件,则无法告知此处发生的情况,因此不清楚file1file2是否为正确版本。

如果你有一个基本版本检入git,比如在提交123abc,那么最简单的方法是:

  • 确保您的树干净(即将新版本移开并重新检查您的HEAD版本)
  • 执行git branch topic_merge_friends_changes 123abc以在包含基本版本
  • 的提交中创建临时分支
  • 查看分支:git checkout topic_merge_friends_changes - 请注意,这可以使用-b标记与checkout
  • 结合上一步骤
  • 现在,将新文件移至适当的位置并git commit
  • 切换回主人:git checkout master
  • git merge topic_merge_friends_changes

或者,您可以跳过提交和合并,而是将基本版本(称为base.txt)和两个更高版本(mine.txtfriends.txt)复制到某处,然后运行{ {1}}将您朋友的更改合并到git merge-file mine.txt base.txt friends.txt,而不实际生成和提交或新分支。

最后,如果您没有基本文件,那么您可以做的最好的事情是手动检查和编辑两个文件之间的差异。你可以

  • mine.txt的输出写入文件并手动编辑结果以获取所需的文件(当然,您需要删除diff添加到文件同意的区域的缩进)
  • 使用视觉差异工具--Emacs有一个很好的视觉差异模式(例如,git diff),让您可以并排查看每个更改并通过击键选择所需的版本,和许多其他编辑将有类似的设施