执行Git pull命令以覆盖本地更改。

9

虽然这方面已经有过帖子,但我还是提交了一个请求,因为我认为这样做是正确的。

所以,我有两个仓库,一个是开发库,一个是生产库。由于一个紧急的 bug 修复,我不得不在生产库中编辑一些内容,现在生产库中有三个文件比开发库新。

我在生产库中提交了这三个文件并尝试 pull,但它告诉我有合并错误。我尝试将新文件复制粘贴到开发服务器上并重试整个过程,但没有成功。现在我确定我需要的是在开发库中(因为我已经将内容复制并粘贴到其中),并已提交,那么我该如何 pull 并覆盖冲突的文件呢?


---- 回应 @Seth 的回答

好的,我想我需要重新措辞我的问题:) 我有三个仓库。一个是开发库,一个是 GitHub 上的库,一个是生产库。 通常,我只需从开发库推送到 GitHub,然后使用git pull origin master (从 GitHub 拉取到生产库),就可以更新生产库。

不幸的是,在未存储的情况下更改了生产库中的文件。在尝试 pull 时,如何强制覆盖而不是合并?

2个回答

23
如果您想完全用远程分支 origin/foo 的内容替换您的本地分支 foo:
git fetch origin
git checkout foo
git reset --hard origin/foo

如果您想要做其他事情,请重新措辞您的问题。然而,我可能会将生产Git存储库添加为远程,并合并实时更改,而不是您尝试的任何操作。


好的,我想我需要重新表达我的问题 :) 我有三个仓库。一个是开发环境,一个在Github上,一个是生产环境。 通常,要更新生产环境,我只需从开发环境推送到Github,然后从Github拉取主分支(从Github到生产环境),就可以了。 不幸的是,我在没有存储更改的情况下更改了生产环境中的文件。当尝试拉取时,如何强制覆盖而不是合并? - Andre
@user786463:我的回答到底有什么问题?它似乎完全符合您的要求(对于“foo”值可能等于“master”的情况)。记得在完成后接受正确的答案。 - Seth Robertson
运行得非常好!谢谢。我不知道用什么替换“foo”。 - Andre
如需进一步澄清要用什么替换 foo,您应该使用您的分支名称。此示例将引用名为 foo 的分支。 - Nick

1

你需要先从生产环境推送到GitHub:

git push origin yourbranch --force

力量将确保GitHub拥有生产力。

以下是您可以做的可能性:

您需要将更改获取到部署存储库中的开发存储库中。此时,您将看到历史正在分支(通过git log --all --graphgitk --all)。

git fetch origin

现在您可以进行变基或合并操作,以使您的最新更改紧随生产存储库上的更改。这将使您能够稍后将更改推送到部署存储库。

冲突是有原因的。查看并解决它们,添加并提交。

如果您希望通过采用生产方面的内容来解决冲突,则可以使用“递归其策略”:

git merge -s recursive -Xtheirs production/yourbranch

如果您不想做出任何更改,可以正常合并,但在冲突时,请获取合并的另一方,添加并提交。

git merge production/yourbranch
git checkout production/yourbranch -- .
git submodules update #this is optional and can be skipped if you don't have any submodules
git add -A
git commit

现在从开发环境向GitHub推送代码,以及从GitHub拉取代码到生产环境都将正常工作。

你可以重置分支,但这意味着你不想保留在开发环境中所做的任何更改。

git reset --hard production/yourbranch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接