我一直在一个分支机构中使用一些代码来改进应用程序。既然我已经完成了,我想将这个分支与master分支合并,但我不能。我首先尝试像这样检查主分支:
$ git checkout master
但是我收到了这个错误:
error: The following untracked working tree files would be overwritten by checkout:
vendor/bin/doctrine
vendor/bin/doctrine.php
...
但供应商目录包含在.gitignore
文件中。
如果我这样做:
$ git status
我明白了:
# On branch mejoras_contralador
nothing to commit (working directory clean)
在此之后,我会这样做:
$ git merge branch
如何避免此错误?
答案 0 :(得分:6)
所以这里的问题是,在你当前的分支上(我们称之为current
),vendor
目录在.gitignore
中并且不是回购的一部分。
但是,它在您的master
分支中提交,因此,您的主分支正在抛出错误The following untracked working tree files would be overwritten by checkout
解决方案很简单。
1)在您的分支current
中,将您的供应商目录重命名为其他目录(例如vendor.temp
,您可以使用mv vendor vendor.temp
)
2)现在做一个git checkout master
。这次不会引发任何冲突,因为您尝试签出的分支上没有已存在的公共供应商目录。
3)现在在git rm -r --cached vendor
分支上运行master
。这将删除在master
分支中跟踪的供应商目录。
4)更新.gitignore
分支中的master
文件,开始忽略vendor
目录。提交相应的更改
5)确定您需要的供应商目录,分支vendor
中的master
目录,或分支vendor
中的current
目录,并重命名/删除文件相应
答案 1 :(得分:1)
添加文件(git add)
并开始跟踪它们并将其存储(git stash)
然后您可以执行git checkout master
答案 2 :(得分:0)
尝试以下方法:
git rm --cached vendor / bin / doctrine.php
并且您已忽略所有文件但获得此状态。
答案 3 :(得分:0)
乍一看,文件应该被忽略但已经提交,你需要用git rm --cached
删除它们。
但是,根据您的comment,似乎文件在当前分支中未跟踪但存在于主分支中?我认为您需要删除当前分支中的文件(将其移动到其他位置),检查主分支,git rm --cached
文件,并合并两个分支。