-1

我一直在一个分支中使用一些代码来改进应用程序。现在我已经完成了,我想将此分支与 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

如何避免这个错误?

4

4 回答 4

6

所以这里的问题是,在你当前的分支上(让我们称之为current),vendor目录在.gitignore并且不是 repo 的一部分。

但是,它已在您的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分支上运行 a 。这将从您的master分支中删除供应商目录。

4)更新分支中的.gitignore文件master以开始忽略vendor目录。提交相应的更改

5)确定您需要哪个供应商目录vendor,分支master中的目录或分支中的vendor目录current,并相应地重命名/删除文件。

于 2013-09-13T17:56:41.630 回答
0

乍一看,这些文件应该被忽略,但已经提交,您需要使用git rm --cached.

但是,根据您的评论,似乎文件在当前分支中未跟踪但存在于主分支中?我认为您需要删除当前分支中的文件(将其移至其他位置),检查主分支,git rm --cached文件,然后合并两个分支。

于 2013-09-13T16:42:57.397 回答
0

添加文件(git add)并开始跟踪它们并存储它们(git stash),然后你就可以做 git checkout master

于 2013-09-13T16:20:21.597 回答
0

尝试以下操作:

git rm --cached vendor/bin/doctrine.php

对于您忽略但获得此状态的所有文件。

于 2013-09-13T16:11:08.597 回答