【问题标题】:Resolve conflicts using remote changes when pulling from Git remote从 Git 远程拉取时使用远程更改解决冲突
【发布时间】:2011-06-14 16:20:54
【问题描述】:

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

那么有没有一种方法可以强制 Git 用 GitHub 中的任何版本覆盖,而不是因为冲突而困扰我?

【问题讨论】:

  • @nvm:不。这是关于真正的合并冲突,而不是会被覆盖的未跟踪文件。
  • @user173973 如果这是重复的,那么反过来。我认为它无关。但是很好,你回答了另一个问题;)

标签: git git-pull


【解决方案1】:

如果你真的想丢弃你在本地所做的 commits,即不再让它们出现在历史记录中,你不是在问如何拉 - 拉意味着合并,而你没有' t需要合并。您需要做的就是:

# 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

【讨论】:

  • 在第二个 git 命令块中.. 在第二个命令之后应该有一个“git fetch origin”吗?
  • @David:是的,你应该在某个时候从原点获取。对不起,我认为它是含蓄的。
  • 当涉及到我和 git 时,没有什么可以隐含的;-)。说真的,谢谢一百万。你的答案正是我想要的。
  • 如果 origin 确实在前面,这会起作用吗?如,如果我没有任何提交,我也可以使用它,实际上分支可以快进吗?
  • 谢谢!让它看起来很容易。
【解决方案2】:

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

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

git pull -s recursive -X theirs

【讨论】:

  • 似乎对我不起作用。我使用 git git 版本 1.5.6.5 得到“错误:未知开关‘X’”。我需要升级到不稳定的版本吗?
  • 另外,Antoine,如果您想获取所有内容的原始版本,而不仅仅是冲突的内容,您可以 - 请参阅我的回答。
  • @David 你可以从backports.debian.org获得最新版本的 git for debian
  • 这正是我想要的!
  • @CeesTimmerman 不正确,至少在最新的 git 中。 X 选项被传递给合并策略,如果合并两个头,只有recursive,所以你的命令会抱怨"Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree." - 很遗憾,因为X可以在配置中设置(例如git config pull.twohead theirs)但s 不能。
猜你喜欢
  • 1970-01-01
  • 2018-07-27
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
相关资源
最近更新 更多