如何在服务器上提交更改并从代码存储库中提取更新而不会发生冲突?

Posted

技术标签:

【中文标题】如何在服务器上提交更改并从代码存储库中提取更新而不会发生冲突?【英文标题】:How to commit changes on server and pull updates from code repository without conflict? 【发布时间】:2021-03-27 18:19:55 【问题描述】:

我从我的 GitLab 存储库中推送了最新代码。这些更改来自我的本地开发机器。我已经使用以下命令成功完成了它:

git push

将我的最新更改推送到我的 GitLab 存储库。现在我在服务器上提取了更新,但不幸的是它没有成功发生,因为我有未提交的来自服务器的更改。

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)

 modified:   .htaccess
 modified:   composer.json
 modified:   composer.lock

Untracked files:
(use "git add <file>..." to include in what will be committed)
php.ini
php_errorlog

这些更改使我的 git pull 失败,因此需要先提交它,然后再从 GitLab 存储库中提取更新。我们应该如何以正确的方式提交它以防止服务器端发生冲突。

其实是这样的:

首先,我将我的更改从本地开发机器推送到 Gitlab 存储库。 git 命令 git push

其次,我将代码更新从 Gitlab 存储库提取到我的服务器。 git 命令 git pull

第三,由于服务器中未提交的更改,我遇到了冲突。 错误冲突:完成第二步后。

 Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)

 modified:   .htaccess
 modified:   composer.json
 modified:   composer.lock

Untracked files:
(use "git add <file>..." to include in what will be committed)
php.ini
php_errorlog

【问题讨论】:

在你的服务器上,你有没有在服务器工作目录中尝试"(use "git restore &lt;file&gt;..." to discard changes in working directory)" .htaccess composer.json composer.lock,然后在服务器上从 gitlab 执行 git pull 那些文件是修复,所以我不能丢弃它。 @DavidC.Rankin 你只是想从你的服务器提交到你的仓库吗? Git 的整体系统设计意味着 Git 不是一个部署系统。如果出于部署目的需要更改某些文件,则应在 Git 之外完成。如果需要更改某些文件以修复错误,则应在 Git 中完成,但不在服务器上。这样一来,服务器端 Git 存储库就不会发生任何变化;实际上;服务器根本没有 Git 存储库,至少不是用于提供服务(如果服务器既是 Git 服务器 和 i> 其他服务服务器)。 是的,你有一点@torek。但是,当我报告这些服务器问题时,我的托管服务提供商自己做了。碰巧我部署到他们服务器的项目与他们的服务器设置不匹配,例如我使用的是 php 版本 7.4,但他们的服务器使用的是 7.3,因此一些要部署的 php 框架包无法正常工作。因此,作为替代方案,他们对服务器进行了一些调整以使其正常工作。因此,那些受影响的文件不能在本地开发中完成,因为它只发生在服务器端。 【参考方案1】:

注意:如果多人在处理同一个文件,则更有可能发生冲突。使用 Visual Studio 代码编辑器

可以轻松解决冲突

解决冲突的步骤

    检查您的所有更改集是否正确,验证一次并删除/丢弃您不想提交的所有想要的文件 在当前工作文件夹中输入命令git add . 然后使用下一个命令git status 检查暂存文件,并验证一次,例如所需文件是否仅已暂存。 然后执行git stash,它将使用另一个索引存储您当前的代码 现在执行git pull 从服务器中提取更改,这将使您当前的工作存储库与服务器最新 现在执行 git stash pop ,这将隐藏您所做的更改 既然您已经弹出您的更改,如果发生任何冲突,请检查更改集 如果两者都需要 - 做Accept Both, 如果只需要您的更改 - 做Accept Incoming, 如果需要服务器中存在的当前更改 - Accept Current。 再次检查git status,通过此您可以重新验证是否只有您的变更集是正确的 现在您可以将更改提交到服务器

希望这会有所帮助

【讨论】:

实际上有两个人在做这个项目。但是,这些冲突仅发生在服务器上,而没有发生在远程存储库上。冲突发生在服务器上,在修复一些与服务器相关的问题后会导致冲突,我无法丢弃它,因为它仅针对服务器问题修复,不适用于本地开发或远程存储库。 @Kishore Kumar

以上是关于如何在服务器上提交更改并从代码存储库中提取更新而不会发生冲突?的主要内容,如果未能解决你的问题,请参考以下文章

将原始 GitHub 存储库中的新更新拉入分叉的 GitHub 存储库

将原始 GitHub 存储库中的新更新拉入分叉的 GitHub 存储库

源代码管理最佳实践 - 定期从存储库更新工作副本

如何重置为提交并使其成为大师?

如何通过提交消息搜索 Git 存储库?

如何更改 gradle 插件存储库?