做一个Git pull来覆盖本地更改

时间:2011-06-06 20:18:53

标签: git versioning commit pull git-pull

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

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

我在生产中提交了三个文件并试了一下,但它告诉我有合并错误。我尝试将新文件复制并粘贴到开发服务器并重试整个过程并且无法正常工作。现在我确定我需要的是开发(因为我复制并粘贴到它中)并且已经提交,所以我怎么能拉出并覆盖冲突的文件呢?


----跟随@Seths回复

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

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

2 个答案:

答案 0 :(得分:22)

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

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

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

答案 1 :(得分: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