【问题标题】:Did I git rebase?我有 git rebase 吗?
【发布时间】:2023-01-10 02:03:54
【问题描述】:

我回到了几周前(假期前)我正在处理的一些代码。我根据合并请求中留下的一些 cmet 进行了更改。

我去推送我的更改,但出现错误:

 ! [rejected]        my_branch -> my_branch (non-fast-forward)
error: failed to push some refs to '<remote>:my_repo.git'
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.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我认为这是我在 rebase 后尝试推送时收到的消息(需要强制推送);但是,我不记得变基(我可能有,只是不记得了)。

当我真的不知道我在推动什么时,我会犹豫是否强制推动。

所以我的问题是:有没有办法检查我的分支机构(特别是我的本地分支机构)是否已重新定位?除了 rebase 之外,是否还有其他可能导致此错误的原因(如果没有,那么我可能会假设我几周前刚刚做了 rebase,并且强制推送可能是安全的)?关于如何安全处理这种情况的任何其他建议?

【问题讨论】:

  • “我认为这是我在 rebase 后尝试推送时收到的消息(需要强制推送)”- 你应该绝不一般情况下需要强制推送。
  • 我想您需要做的是查看本地和远程分支机构的历史记录,看看发生了什么。
  • 非快进错误可能是由于您在另一个贡献者刚刚推送不同的新提交时尝试推送新提交。检查它的方法是git fetchgit diffgit log。补救方法是git pull --rebasegit fetch &amp;&amp; git rebase,然后是git push
  • @0x5453,谢谢——你能详细说明一下吗?评分最高的答案 here 似乎建议在 rebase 之后强制推送。
  • @phd - 这有效,谢谢!我按照您的步骤进行了操作,并且能够正常推送。尽管我仍然认为可能有人希望知道他们是否重新定位(我的主要问题),但请随意将其添加为答案,因为它确实解决了我的问题(并且将来也可能解决其他人的问题)。

标签: git rebase git-rebase


【解决方案1】:

非快进错误可能是由于您在另一个贡献者刚刚推送不同的新提交时尝试推送新提交。检查它的方法是git fetchgit diff origin/my_branchgit log origin/my_branch..my_branch。补救方法是git pull --rebase origin my_branch 或者

git fetch origin
git rebase origin/my_branch my_branch
git push origin my_branch

【讨论】:

    【解决方案2】:

    首先,我同意重要的是要知道你是因为变基还是因为其他原因(比如其他人向分支添加了提交)而发生分歧。如果你因为 rebase 而分歧,盲目拉取(有或没有 rebase)可能会无意中引入旧版本的提交。

    这种情况经常发生在我身上。我切换到我的一个个人的在我希望处理的分支上,我键入 git status 并看到我的分支与远程分支不同,例如它告诉我我提前 300 次提交,落后 2 次。在这种情况下我知道我变基了,但我可能仍然会看:

    git log @{u} -n3 # show me the top 3 commits of my remote branch
    git log @ -n3 # show me the top 3 commits of my local branch
    

    我希望看到相同的 2 个提交具有相同的作者(我)和作者日期,但具有不同的提交 ID。第三次提交在我的本地分支上应该是更新的,这意味着我只是重新定位到我的基本分支的更新版本。

    请注意,如果我的分歧编号是 2 和 2,并且第 3 次提交是相同的 ID,那么这意味着我可能没有变基到目标上,而是进行了交互式变基,这使得查看差异变得容易:

    git diff @{u} @

    总的来说,我倾向于总是使用git push --force-with-lease,所以在看到我可以推送之后我有信心。如果--force-with-lease 仍然失败,我只是简单地git fetch,然后是git status,并重复上述步骤以查看我遗漏了什么。

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 2016-10-27
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多