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 索引中的所有內容。事實是,合并因合并沖突而停止?,F在您的工作就是安排獲得正確的合并結果。這些不需要與三個輸入提交中的任何一個匹配,盡管正確的合并可能以某種方式使用所有三個輸入。由于
git merge
已完全停止,您現在可以完全控制最終運行git merge --continue
或git commit
完成合并時索引中的內容。您可以運行git rm -r .
以刪除幾乎所有內容,從整個布構建所有新文件,并且git add
.
(可能其他選項之一比“核武器鋪路”更有用,即使您確實選擇“核武器鋪路”(刪除并重新創建),您也可能不想像這樣批量進行這。)
添加回答
舉報