如何在服务器上提交更改并从代码存储库中提取更新而不会发生冲突?
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 <file>..." 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 存储库