【问题标题】:What is git trying to push?git试图推动什么?
【发布时间】:2012-11-14 16:24:36
【问题描述】:

我想删除我的 repo,但我想确保我的所有变更集都已推送。 git log origin..HEADgit log origin/master..master 都没有显示任何内容。但是,当我尝试git push 时,我得到:

To remote-repo
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '/van/work/nms/esteras/cmpt-bitArray-clean1.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

如果我没有本地更改,不应该只是说Everything up-to-date吗?如果我有传出更改,我怎么知道它们是什么?我可能不关心他们,但我需要知道他们要决定什么。

【问题讨论】:

  • 执行 git fetch 后检查与原点的差异
  • 你应该先$ git pull

标签: git


【解决方案1】:

当远程站点发生更改或(更糟)已重新定位(称为操作重写历史记录)时,可能会发生这种情况。

您可以使用此方法找到本地 HEAD(master)和远程之间的区别:

【讨论】:

  • git diff origin/master...master 没有返回任何输出,但我仍然收到错误消息。
  • @StephenRasku 我想你错过了my answer。完全有可能拥有具有不同历史的相同内容(例如,在rebase、squash、merge等之后)。这可能会导致“不兼容”分支,您必须在其中合并或强制推送。查看git log (options) origin/master...master 以了解修订祖先的差异!
  • git log --left-right --graph --cherry-pick --oneline origin...origin/mastergit log --left-right --graph --cherry-pick --oneline origin/master...origin 均不返回任何输出。
  • 首先,...可交换的(A...B 等价于 B...A)。第二:这令人惊讶。我只能猜测你 (a) 不是本地最新的 (git remote update -prune?) 或者 (b) 正在推送到另一个分支/存储库而不是你比较的。
  • 哦,等等: (c) 在该日志中删除 --cherry-pick 选项?它将显示重新定位的提交是不同的,这正是你想在这里看到的。此选项在手册页中进行了描述,或者例如这里:stackoverflow.com/a/7549118/85371
【解决方案2】:

您想运行git diff origin/mastergit diff origin/master..master

git diff origin/master...master 比较自上次推送以来的更改,或者更确切地说是本地历史记录中不在远程的更改。

【讨论】:

  • 我想要变更集列表(即git log)而不是差异。 git diff 会告诉我发生了什么变化,但不会告诉我为什么。
  • 那是因为您看到的是具有不同数据的共同历史 - 这是完全可能的,因此您要检查差异是否存在差异,日志不是更改的内容或差异,它是历史和日志的比较就是历史的比较。如果您想查看差异,请使用 diff。
  • 就像我说的,我想要变更集而不是差异。还是谢谢。
  • 没有变更集 - 这就是重点。你们有共同的历史。这是力推的常见问题
  • 我不认为我有共同的历史。我假设您正在谈论具有不同哈希的相同变更集。有没有办法验证这一点?我没有看到任何证据。
猜你喜欢
  • 2019-03-17
  • 2019-02-18
  • 2012-02-25
  • 1970-01-01
  • 2016-11-13
  • 2014-12-26
  • 2016-04-21
  • 2023-02-06
  • 2013-05-25
相关资源
最近更新 更多