目前我使用的是yii,我使用的是git center仓库,比如说在开发中config被设置为localhost,在生产服务器中config被设置为server ip。
我修改了需要提交的文件
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: backend/modules/company/controllers/XyzController.php
当我提交时,我得到错误
U backend/config/main.php
U frontend/config/main.php
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
这里是Unmerged paths
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: backend/config/main.php
both modified: frontend/config/main.php
因为当我从中心存储库提取时,它与生产服务器配置冲突。
我已经在.gitignore
中包含了backend/config/main.php
和frontend/config/main.php
,但是没有效果。
如何解决这个问题,以便只提交XyzController.php
并推送到远程?
如果我提交backend/config/main.php
和frontend/config/main.php
,那么它将包括在push中。并且它认为当我在生产服务器中从中心库拉取时它将冲突。
先谢谢你。
3条答案
按热度按时间qpgpyjmq1#
git merge
或等效的git merge
,它试图合并对该文件的两组不同的更改,但失败了。这意味着 * 你 * 现在必须合并文件中的两组修改。Git会在你的工作树中留下它最大的努力来合并这两组修改,但是Git很确定它留下的是 * 不正确的 *。然后你提到:
假设在开发中,config设置为localhost,而在生产服务器中,config设置为server ip...
如果冲突发生在配置文件中的IP地址上,那么Git是正确的:它就不能适当地解决冲突。
危险在于,通过将这些文件作为版本控制文件放入,未来的
git merge
操作将认为它 * 已经 * 正确地解决了合并,而实际上,它放入了错误的IP地址。**配置文件不应该是版本控制的。**请参阅Committing Machine Specific Configuration Files以获得一个很好的方法。还有其他方法;例如,您可以提交
config.sample
而不是config.php
,并将config.php
作为一个忽略的文件,每个用户都必须基于版本控制的config.sample
来编写该文件。然而,与此同时,你仍然需要清理现有的混乱。合并冲突的发生是因为这两个文件 * 已经是版本控制的 *。除非版本控制是你自己的错误,作为你刚刚所做的一个更改的一部分-这似乎是不可能的1-你应该作为一个单独的操作(独立于其他更改)撤销版本控制。
因此,您可以使用此程序:在编辑器中打开两个冲突的文件
backend/config/main.php
和frontend/config/main.php
,仔细检查配置。根据需要修复它们,并保存结果。然后使用以下命令:将修正后的版本放到适当的位置。很可能它们现在 * 匹配 * 了当前分支上以前的版本,所以
git status
将不再显示它们。(如果git status
* 没有 * 显示它们,请使用git diff --cached
查看您所做的更改。)无论如何,这将在索引中将这两个文件标记为完全解析。现在您可以进行新的提交。如果这两个配置文件与当前(HEAD
)commit,那么在新的commit中唯一 * 改变 * 的将是文件backend/modules/company/controllers/XyzController.php
。(记住,一个提交有 * 每个 * 提交文件的一个完整快照。你 * 下一次 * 提交是基于当前索引中的任何内容,也就是你
git add
所做的任何内容。一旦你提交了,新的HEAD
提交和索引现在是匹配的,所以git status
表示没有什么可提交的。为了产生合并冲突,文件必须同时存在于两个提示提交中,或者同时存在于合并基础提交和一个提示提交中,或者同时存在于三个提交中。请记住,每个文件的三个版本都可以合并:
--ours
版本,即HEAD
提交中的版本;和--theirs
版本,这是另一个分支tip中的版本。如果你错误地添加了一个配置文件到你的分支,但是它不在基版本中,也不在
--theirs
中,这不会有冲突。因此,它至少应该在另外两个提交中的一个中。假设你没有自己写基版本,也没有做另一个分支端提交。如果是这样的话,您不可能一开始就造成这个配置文件现在是版本控制的问题。djmepvbi2#
您只能使用您的文件、文件夹和文件夹。
如果
backend/config/main.php
,frontend/config/main.php
文件中发生冲突,则解决冲突,添加,提交。如果你想保留你对文件所做的更改,那么在拉的时候接受
ours
。92dk7w1h3#
如果由于
git stash pop
而导致路径未合并,则可以手动解决该文件上的冲突,然后执行git reset filename