1 回答
TA贡献1810条经验 获得超4个赞
首先,请注意,.gitignore
内容本身永远不会对合并产生任何直接影响。这是因为合并了commitsgit merge
的内容,这些内容已经提交并且无法更改。他们拥有他们拥有的文件。地球上或其他任何地方的任何力量都无法改变它们。您正在合并一些现有的提交,准备进行新的提交。git merge
我已经
git rm '*.pyc'
在这两个文件中运行过...
您的意思是“在两次提交中”吗?“在两个文件中”在这里没有什么意义。
我不记得重命名或删除任何
venv/lib/*
文件。
如果venv/lib
包含*.pyc
文件,并且您运行了上面的命令,您将从工作树和 Git 索引中git rm
删除这些文件。*.pyc
一旦文件脱离 Git 的索引,现有*.pyc
条目中的现有条目.gitignore
就会生效,从而防止未来的*.pyc
文件通过工作树进入 Git 的索引。随后的提交将缺少这些*.pyc
文件。
我将在这里查看第一个冲突,并仅出于发布目的而分开长行:
CONFLICT (rename/delete):
venv/lib/python3.7/site-packages/
astroid/brain/__pycache__/brain_subprocess.cpython-37 2.pyc
deleted in version3ascii and renamed to
venv/lib/python3.7/site-packages/
astroid/brain/brain_subprocess 3.py
in HEAD. ...
这一切真正意味着:
合并基础提交包含一个名为 的文件
.../__pycache__/brain_subprocess.cpython-37 2.pyc
;提交
version3ascii
缺少该文件;和该
HEAD
版本也缺少此文件,但有一个名为.../astroid/brain/brain_subprocess 3.py
并且HEAD
该新名称的内容与旧名称下的合并基础内容相似,足以决定在git merge
合并基础提交和提交之间进行更改的人HEAD
必须重命名(并且可能还修改)了合并基础副本文件。
合并基础提交似乎更有可能具有这些*.pyc
文件和所有这些venv/*
文件,并且这些*.pyc
文件在两个分支提示提交(version3ascii
分支提示和当前分支提示)中都被正确删除。但是,某些venv/*
文件存在于 中HEAD
,但可能不存在version3ascii
(否则 Git 可能会在那里检测到类似的重命名)。.py
该文件似乎也不是该文件的重命名和修改后的副本.pyc
,Git 的相似性检测器只是将其误检测为重命名。
前进的道路有很多。例如:
如果
venv/*
任何一个分支提示提交中都不应该有任何文件,您可以只进行两个缺少这些文件的新分支提示提交。现在,Git 不会找到看起来相似的文件来声称重命名,这会让 Git 相信不真实的事情。如果您不想进行新的提交,则可以中止此合并并使用扩展参数(
-X
参数)重新运行,该扩展参数将重命名阈值设置得更高或完全关闭重命名检测器,例如git merge -Xfind-renames=99
将其限制为 99%相似的文件,而不是 50% 相似的文件。或者,您可以简单地手动调整 Git 索引中的所有内容。事实是,合并因合并冲突而停止。现在您的工作就是安排获得正确的合并结果。这些不需要与三个输入提交中的任何一个匹配,尽管正确的合并可能以某种方式使用所有三个输入。由于
git merge
已完全停止,您现在可以完全控制最终运行git merge --continue
或git commit
完成合并时索引中的内容。您可以运行git rm -r .
以删除几乎所有内容,从整个布构建所有新文件,并且git add
.
(可能其他选项之一比“核武器铺路”更有用,即使您确实选择“核武器铺路”(删除并重新创建),您也可能不想像这样批量进行这。)
添加回答
举报