如何从远程服务器强制检出最新版本?

3
我在GitHub上有一个仓库,我经常从本地计算机提交。另一方面,我有服务器从仓库拉取。Web服务器只需执行git pull以获取来自GitHub仓库的最新更改。这是完全自动化的,并且应该保持不变(像Ruby工具Capistrano之类的解决方案已经过时)。
通常,简单的git pull就可以正常工作。但是,有时候我会更改最后一次提交(git commit --amend),并且将更改两次推送到GitHub。如果服务器在两次推送到GitHub之间自动更新了它的代码,则下一个服务器端git pull将失败,因为存在合并冲突。
为了解决这个问题,我需要以下行为:服务器应继续git pull(或类似的操作)GitHub存储库,但在出现合并冲突的情况下,GitHub存储库应优先于服务器上的本地存储库。因此,我想要一个像git clone的git命令,但不必每次都复制整个存储库。
3个回答

7

如果您在本地没有进行任何修改,当然可以强制执行git checkout,但正确的做法是永远不要修改已经离开本地存储库的提交记录


我知道,但我想这并不重要,因为我目前是该远程仓库的唯一用户。 - Christoph Schiessl
2
但现在你看到它确实很重要。因为另一台计算机也是用户。但既然你这样问问题——这是否意味着你正在询问如何重新同步它一次? - Michael Krelin - hacker
如果只有一个人在使用代码库(无论代码库的数量有多少),更改提交记录并没有什么问题。除非这个人担心会混淆自己,否则他们可以随时进行检出、重置或强制更新操作,以将多个代码库重新同步。 - Dan Moulding
1
丹,这个问题恰好展示了在单人仓库中修改提交记录的问题所在。会让自己和电脑非常困惑;-)。我认为只要你意识到影响并准备好处理它们,修改提交记录是没有问题的。 - Michael Krelin - hacker
1
丹,学会钓鱼需要时间,而且在饥饿的情况下很难走这条路;-) 克里斯托夫,使用修订更加规范,但通常你应该有足够的时间在代码离开你的代码库之前进行修改。 不过话又说回来——只要你知道如何处理,一切都没问题,你可以自己决定是否想要修改。 - Michael Krelin - hacker
显示剩余3条评论

6

JB是正确的,但我会在他的回答上进行扩展。

与其让服务器自动运行git pull,你应该让它运行git fetch origin; git checkout origin/master。当然,这假设你已经设置了“origin”远程引用指向本地计算机的repo。

如果你需要直接修改服务器源代码(进行快速修复或其他操作)并想要提交这些更改,你可以在提交之前使用git branch -f master origin/master将服务器的主分支设置为与本地计算机分支相同的提交。


4

如果您从未修改过拉取的源代码,您可能只需要执行fetchcheckout操作。


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