当使用git pull导致冲突,但是使用git pull --rebase却不会出现冲突时,这是什么意思?

4

我正在从只有我访问权限的代码库中拉取代码。据我所知,我只从一个代码库向其推送过代码。但有几次我尝试向该代码库推送代码时出现了以下情况:

To jbaker@192.168.2.216:tsched_dev.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'jbaker@192.168.2.216:tsched_dev.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

通常,这意味着我需要执行 git pull (尽管所有更改都应该是快进的)。当我执行 git pull 时,会出现冲突。如果我执行 git pull --rebase,则可以正常工作。我做错了什么?


我认为这个问题应该在超级用户网站上发布。我们通常会在那里提出这些问题。 - vodkhang
根据您的输出,您正在尝试推送(push),而不是拉取(pull)。 - ThiefMaster
@ThiefMaster - 你是正确的。我的错误。 - Jason Baker
1个回答

5
这意味着当前的 origin/master 和当前的 master(包含您自己的提交)不兼容,但是如果您在自己的提交之前获取了自上次更新以来的更改并将其放置,则可以达到非冲突状态。
基本上,这取决于您如何排序有冲突的提交。使用 rebase,您将在您的提交之前放置 origin 的提交;而使用 merge,您将整个 origin 提交与您的主分支进行比较,这可能会产生差异。

1
我明白了。换句话说,使用git fetch可以解决问题,而无需使用git pull --rebase - Jason Baker
没关系,你已经用 pull 命令进行了获取并合并操作。重点是,使用变基将起作用,而合并会产生冲突。 - Arkaitz Jimenez

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