我在我的项目中粘贴了另一个版本的文件,它有添加和删除。我想假装合并到当前提交的版本,这样我就可以比通过眼睛比较文件更容易地看到和解决冲突。
如何启动将修改后的文件(工作树)合并到同一文件的HEAD版本中?
config/routes.rb # (1) commited version HEAD
config/routes.rb # (2) modified version in working tree
我已将(2)config/routes.rb
从我朋友发送给我的文件粘贴到我现有的路径文件(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
...
如果没有基本文件,则无法告知此处发生的情况,因此不清楚file1
或file2
是否为正确版本。
如果你有一个基本版本检入git,比如在提交123abc
,那么最简单的方法是:
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.txt
和friends.txt
)复制到某处,然后运行{ {1}}将您朋友的更改合并到git merge-file mine.txt base.txt friends.txt
,而不实际生成和提交或新分支。
最后,如果您没有基本文件,那么您可以做的最好的事情是手动检查和编辑两个文件之间的差异。你可以
mine.txt
的输出写入文件并手动编辑结果以获取所需的文件(当然,您需要删除diff添加到文件同意的区域的缩进)git diff
),让您可以并排查看每个更改并通过击键选择所需的版本,和许多其他编辑将有类似的设施