Git:"Updates were rejected because the tip of your current branch is behind.."但是如何看待差异?



我刚刚完成了一段代码的工作,当我去推送更改时,我得到了已经很有名的:

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g. 
hint: 'git pull ...') before pushing again.

我在这里多次看到这个问题,例如(1(和(2(。

因此,解决方案是:

  • git pull,以便将远程更改合并到我的本地工作,或者
  • git push -f,强制推送以更新远程(源(分支。

现在,我已经有一段时间没有在这个分支上工作了。我不一定想将远程更改合并到我当前的工作中!我也不知道我是否可以安全地在源分支上强制更新......

我怎样才能看到差异并决定哪个最适合我的情况?

为了查看差异,首先您需要从源存储库获取提交:

git fetch origin

现在你可以看到差异(假设你在主分支上(git diff HEAD..origin/master

现在,您已经掌握了在push更改之前决定mergerebase的知识。

最近当我使用git checkout -b feature/abc创建一个新分支时,我遇到了这种情况,提交了一些更改,然后尝试git push --set-upstream origin feature/abc它来创建拉取请求以供审查。发生此错误的原因是,当我以为我在本地定义分支时,远程分支已经存在。删除远程分支解决了问题,我的推送成功了。

我发现这个命令工作正常:

git push -u origin main -f

您只需要添加一个 -f 标志来强制推送。

我想添加一个最近发生在我身上的场景,即使你做对了一切,这个错误似乎也突然出现。原因并不明显,但最终似乎是自 git 版本 2.0 以来默认推送行为的变化。我正在与使用 git 版本 1.8 的人协作,我有 2.x 版本。因此,尽管我们都在做 git 推送,但不同类型的推送正在发生。对我们来说,一旦我们通过在 git 版本 1.8 计算机上运行此命令来更改默认推送行为,问题就解决了-

git config --global push.default simple

这会将 git 版本>=1.7 的 push.default 更改为与版本 2.0 及更高版本相同。对于较低版本的 git,您可能需要另一个默认行为。我们都是新手,所以如果我错了,请纠正我,但这确实使我们的"更新被拒绝......"错误消失。

另外,如果有更好的答案,请告诉我,我很乐意将其移至其他地方。

如果您打算放弃本地更改,则应运行git reset --hard @{u}.再次注意,这是对某些数据的不可逆操作,因此在运行它之前请确保。方法如下:

要查看您当前拥有的本地提交,您可以使用git log HEAD --not --remotes,与任何远程分支进行比较,git log @{u}..HEAD以查看特定于跟踪分支的差异。

要查看您在本地提交的实际差异,请运行git diff @{u}...。这将忽略远程进度,并仅显示您的更改。

要查看未提交的更改,请运行git diff HEAD

PS:您应该先运行git fetch origingit remote update以更新跟踪引用。

相关内容

最新更新