我一直在一个分支中使用一些代码来改进应用程序。现在它已经完成,我想将此分支与master分支合并,但我不能。我首先尝试 checkout 到master分支,如下所示:
$ git checkout master
但我得到了这个错误:
error: The following untracked working tree files would be overwritten by checkout:
vendor/bin/doctrine
vendor/bin/doctrine.php
...
但是vendor目录包含在.gitignore
文件中。如果我执行:
$ git status
我收到这条信息:
# On branch mejoras_contralador
nothing to commit (working directory clean)
在此之后,我会:
$ git merge branch
如何避免这种错误?
4条答案
按热度按时间wqlqzqxt1#
因此,这里的问题是,在当前分支(我们称之为
current
)上,vendor
目录位于.gitignore
中,不是repo的一部分。但是,它是在您的
master
分支中提交的,因此,您的master分支将抛出错误The following untracked working tree files would be overwritten by checkout
解决办法很简单。
1)在分支
current
中,将vendor目录重命名为其他目录(例如vendor.temp
,可以使用mv vendor vendor.temp
)2)现在执行一个
git checkout master
,这一次不会抛出任何冲突,因为在您试图 checkout 的分支上已经没有公共的供应商目录。3)现在在你的
master
分支上运行一个git rm -r --cached vendor
,这将从你的master
分支中删除供应商目录。4)更新
master
分支中的.gitignore
文件以开始忽略vendor
目录。5)确定您需要哪个供应商目录,是分支
master
中的vendor
目录,还是分支current
中的vendor
目录,并相应地重命名/删除文件。ahy6op9u2#
请尝试以下操作:
git rm --缓存的供应商/bin/doctrine. php
对于所有被忽略但获得此状态的文件。
lf5gs5x23#
添加文件
(git add)
并开始跟踪它们并将其隐藏(git stash)
,然后您可以执行git checkout master
1wnzp6jl4#
乍一看,这些文件应该被忽略,但它们已经被提交了,您需要使用
git rm --cached
删除它们。然而,根据您的评论,似乎文件在当前分支中未被跟踪,但在主分支中存在?我认为您需要删除当前分支中的文件(将其移动到其他地方), checkout 主分支,
git rm --cached
文件,并合并两个分支。