这个问题与How do I tell git to always select my local version for conflicted merges on a specific file?非常相似,但有一个重要区别。
我已经按照VonC对上述问题的回答中的优秀步骤进行了操作,一切都近乎可行。但是,在我的情况下,我只更改了文件的传入版本(而不是本地和传入版本)。
由于只有一个分支发生了变化,因此不需要合并。在这种情况下,似乎git不打算运行合并驱动程序,只是用传入的覆盖本地版本,这正是我的自定义合并驱动程序应该阻止的。< / em>的
有没有办法告诉git它在合并期间永远不应该更改特定文件(即使在VonC的答案看起来不太合适的上述情况下)?
答案 0 :(得分:2)
当Git决定没有冲突时,似乎其他人已经尝试过但没有强制冲突。
这个问题“Git merge - manual merge - forcing conflic having WHOLE old and new file version”在评论中得出结论:
我最担心的是答案:“这是不可能的,因为它是git的工作方式”。
并且“Need GIT workflow suggestion”提到尝试:
*.xml merge=Unset
到我的.gitattributes
文件中 或者是~/.gitconfig
中的自定义合并驱动程序试图导致自动合并失败
换句话说,这可能不是正确的方法。
如果您确定合并引入的所有修改都不在此处,那么您可以尝试:
git clone yourRepo aCloneRepo
cd aCloneRepo
git merge --no-commit --no-ff origin/source_branch
# simply overwrite any change file by the ones in ..\yourRepo
git add .
git commit -m "merge"
请注意,即使您的git merge
提及没有任何内容可以提交(因为您还原了所有已修改文件的内容),最终的“git status
”仍然有效。
它将在新提交中记录合并。
那会给你:
C:\Users\VonC\prog\git\tests\mergekeep\r4>git lg
* a6a1588 - (HEAD, master) merge (2 minutes ago) <VonC>
|\
| * 1bcd75d - (origin/b) addition (2 hours ago) <VonC>
|/
* 9d2e8fb - (origin/master, origin/HEAD) first file (2 hours ago) <VonC>
但是本地文件没有变化。
如果您再次尝试合并您的分支,您将获得:
C:\Users\VonC\prog\git\tests\mergekeep\r4>git merge origin/b
Already up-to-date.
但是,这种解决方法很麻烦,涉及从一个工作树到另一个工作树的克隆和一些手动复制或rsynch。 我尝试使用各种git reset命令或管道命令,如git update-index,但没有太大的成功。