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

Dav*_*ite 269 git git-pull

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

那么有没有办法可以强制Git用GitHub中的任何版本覆盖,而不是打扰我的冲突?

Cas*_*bel 455

如果你真的想要丢弃你在本地提交的提交,即永远不再在历史记录中提交它们,你就不会问如何拉 - 拉意味着合并,而你不需要合并.你所需要做的就是:

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

我个人建议首先在你当前的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
Run Code Online (Sandbox Code Playgroud)

  • 当涉及到我和git ;-)时,没有任何暗示。严重来说,谢谢一百万。您的答案正是我所要的。 (2认同)

Ant*_*sse 124

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

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

git pull -s recursive -X theirs
Run Code Online (Sandbox Code Playgroud)

  • 似乎不适合我.我使用git git 1.5.6.5版获得"错误:未知开关`X'".我是否需要升级到不稳定版本? (3认同)
  • @David您可以从http://backports.debian.org/获取最新版本的debian git (2认同)
  • 这正是我想要的! (2认同)
  • @CeesTimmerman不是真的,至少在最新的git中。传递了“ X”选项以合并策略,如果合并两个头,则仅是“递归”,因此您的命令将抱怨““找不到合并策略”。可用的策略是:章鱼我们的递归解析子树。” -很遗憾,因为可以在config中设置`X'(例如`git config pull.twohead thems`),​​但是`s`不能。 (2认同)