9

肯定有关于这个的帖子,但我实际上做了一个提交,因为我认为这是正确的做法。

所以,我有两个存储库,一个开发和一个生产。我不得不在生产中编辑一些东西,因为它是一个紧急的错误修复,现在我有三个文件在生产中比在开发中更新。

我在生产中提交了三个文件并尝试了拉取,但它告诉我存在合并错误。我尝试将新文件复制并粘贴到开发服务器并重试整个过程,但没有成功。现在我确定我需要的是开发(因为我复制并粘贴到其中)并提交了,那么我怎么能拉和覆盖冲突的文件呢?


---- 跟进@Seths 的回复

好的,我想我确实需要改写我的问题 :) 我有三个存储库。一项开发,一项在 GitHub,一项生产。通常为了更新生产,我只是从开发推送到 GitHub,git pull origin master(从 GitHub 到生产),它可以工作。

不幸的是,我在没有存储的情况下更改了生产文件。尝试拉动时如何强制覆盖而不是合并?

4

2 回答 2

23

如果你想用远程分支 origin/foo 的内容完全替换你的本地分支 foo:

git fetch origin
git checkout foo
git reset --hard origin/foo

如果您想做其他事情,请改写您的问题。但是,我可能会将生产 Git 存储库添加为远程,然后合并实时更改,而不是您尝试的任何内容。

于 2011-06-06T20:25:09.747 回答
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
于 2011-06-06T21:17:03.133 回答