从Git远程拉出时使用远程更改解决冲突


297

我正在尝试将代码从GitHub存储库中提取到服务器上,但是由于合并冲突,提取仍然失败。自上次拉取以来,我不想保留本地服务器上可能发生的任何更改。

那么有什么办法可以迫使Git用GitHub中的任何版本覆盖,而不是让我烦恼冲突?



4
@nvm:不。这是关于真正的合并冲突,而不是将被覆盖的未跟踪文件。
卡斯卡贝尔2011年

Answers:


491

如果您确实要舍弃您在本地所做的提交,即永远不会再将它们提交到历史记录中,那么您就不会在询问如何拉-拉表示合并,而您无需合并。您需要做的就是:

# fetch from the default remote, origin
git fetch
# reset your current branch (master) to origin's master
git reset --hard origin/master

我个人建议您首先在当前的HEAD上创建一个备份分支,这样,如果您意识到这是一个坏主意,就不会丢失它。

另一方面,如果您希望保留那些提交并使其看起来好像与原始文件合并,并导致合并仅保留原始文件的版本,则可以使用ours合并策略:

# fetch from the default remote, origin
git fetch
# create a branch at your current master
git branch old-master
# reset to origin's master
git reset --hard origin/master
# merge your old master, keeping "our" (origin/master's) content
git merge -s ours old-master

1
在第二个git命令块中..第二个命令后是否应该有一个“ git fetch origin”?
David Tuite 2011年

@David:是的,您应该在某个时候从起源获取。对不起,我认为它是隐性的。
卡斯卡贝尔2011年

2
当涉及到我和git ;-)时,没有任何隐含的含义。严重来说,谢谢一百万。您的答案正是我所要的。
David Tuite 2011年

1
如果原产地确实领先,这项工作会成功吗?例如,如果我之前没有任何提交,并且分支可以快速转发,我也可以使用它吗?
贾里德·福赛斯

1
谢谢!使它看起来很容易。
sholsinger

137

您可以使用nvm指向的重复链接中的答案。

或者,您可以通过使用更改来解决冲突(但是,如果某些更改与远程版本不冲突,则可能会保留一些更改):

git pull -s recursive -X theirs

3
似乎不适合我。我使用git git 1.5.6.5版收到“错误:未知开关'X'”。我需要升级到不稳定版本吗?
David Tuite 2011年

另外,Antoine,如果您想获取所有内容的原始版本,而不仅仅是冲突的内容,则可以-看到我的答案。
卡斯卡贝尔2011年


2
这正是我想要的!
micahblu 2016年

2
@CeesTimmerman不是真的,至少在最新的git中。X选项传递给合并策略,这仅recursive在合并两个头部时才执行,因此您的命令会抱怨"Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree."-这很遗憾,因为X可以在config中设置(例如git config pull.twohead theirs),但s不能。
OJFord
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.