Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何忽略未合并的路径?_Git_Yii - Fatal编程技术网

Git 如何忽略未合并的路径?

Git 如何忽略未合并的路径?,git,yii,Git,Yii,目前我使用的是yii,我使用的是git中心存储库,比如在开发中,config设置为localhost,在生产中,server config设置为server ip 我修改了需要提交的文件 Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: backend/modules/company/controllers/XyzController.php 因为当

目前我使用的是yii,我使用的是git中心存储库,比如在开发中,config设置为localhost,在生产中,server config设置为server ip

我修改了需要提交的文件

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   backend/modules/company/controllers/XyzController.php
因为当我从中心存储库中提取时,它与生产服务器配置冲突

我已经在
.gitignore
中包含了
backend/config/main.php
frontend/config/main.php
,但没有效果

那么,我如何才能解决它,从而只提交
XyzController.php
并推送到远程

如果我提交
backend/config/main.php
frontend/config/main.php
,那么它将包含在push中。它认为在生产服务器中,当我从中心存储库中提取时,会发生冲突


提前感谢。

您可以
只添加
XyzController.php
文件,
提交
推送

$ git add backend/modules/company/controllers/XyzController.php
$ git commit -m 'Added XyzController'
$ git push origin HEAD
最好拉远程更改。如果在
backend/config/main.php
frontend/config/main.php
文件中发生冲突,则解决冲突、添加、提交

如果您想保留对文件所做的更改,请在拉取时接受
ours

$ git pull origin <branch> -s recursive -X ours    # accept your changes
$git pull origin-s recursive-X ours#接受您的更改
未合并的路径意味着您已经运行了
git merge
,或与之相当的
git merge
,它试图将两组不同的更改合并到该文件中,但失败了

这意味着您现在必须合并该文件中的两组更改。Git将在您的工作树中留下它在组合这两组更改方面的最大努力,但是Git非常确定它留下的内容是不正确的。然后你提到:

假设在开发中,config设置为localhost,在生产中,server config设置为server ip

如果冲突发生在配置文件中的IP地址上,Git是正确的:它不会正确地解决冲突

危险在于,通过将这些文件作为版本控制文件放入,未来的
git merge
操作会认为它正确地解决了合并问题,而实际上,它放入了错误的IP地址

配置文件不应进行版本控制。请参阅以了解一种好的方法。还有其他的,;e、 例如,您可以提交
config.sample
而不是
config.php
,并将
config.php
作为忽略文件,每个用户都必须根据受版本控制的
config.sample
编写该文件

然而,与此同时,你仍然需要清理现有的混乱局面。发生合并冲突,因为这两个文件已受版本控制。除非版本控制是您自己的错误,因为您刚刚做了一个似乎不可能的更改1,否则您应该作为一个单独的操作(独立于其他更改)撤消版本控制

因此,您可以使用以下过程:在编辑器中打开两个冲突的文件
backend/config/main.php
frontend/config/main.php
,并仔细检查配置。根据需要修复它们,并保存结果。然后使用以下命令:

git add backend/config/main.php
git add frontend/config/main.php
将已更正的版本放置到位。它们现在很可能与当前分支上的早期版本相匹配,因此,
git status
将不再显示它们。(如果
git status
确实显示了它们,请使用
git diff--cached
查看所做的更改。)在任何情况下,这都会将这两个文件标记为在索引中完全解析。现在可以进行新的提交。如果这两个配置文件与当前(
HEAD
)提交中的配置文件匹配,那么新提交中唯一更改的就是文件
backend/modules/company/controllers/XyzController.php

(请记住,提交有每个提交文件的完整快照。下一次提交基于当前索引中的任何内容,即
git添加的任何内容
。一旦提交,新的
提交和索引现在匹配,因此
git状态
表示无需提交。)


为了获得合并冲突,文件必须同时出现在两个tip提交中,或者出现在合并基和一个tip提交中,或者出现在所有三个提交中。请记住,合并可以从每个文件的三个版本进行:

  • 合并基础版本,即任何分支开始分歧之前的版本
  • --ours
    版本,即
    头中的版本
    提交;及
  • ——他们的
    版本,即另一个分支提示中的版本

如果您错误地将配置文件添加到分支中,但它不在基本中,也不在
--他们的
中,则不会发生冲突。因此,它必须至少位于其他两个提交中的一个。假设您没有自己编写基础版本,也没有提交其他分支提示。如果这是真的,您不可能首先导致此配置文件现在是版本控制问题。

如果由于
git隐藏弹出而导致路径未合并
您可以手动解决该文件上的冲突,然后执行
git重置文件名

您不能忽略存储库中的文件。将文件替换为服务器版本,提交,然后更改您想要和不提交的方式。如果它们在服务器上经常更改,那么您手头就有一大堆手动操作的麻烦。
$ git pull origin <branch> -s recursive -X ours    # accept your changes
git add backend/config/main.php
git add frontend/config/main.php