gpt4 book ai didi

Git rebase 显示非快进

转载 作者:太空狗 更新时间:2023-10-29 14:31:54 30 4
gpt4 key购买 nike

我深埋在 git 中。

我是如何到达那里的:

我不是 git 专家。如果我缺少任何细节,请问我澄清。几天前我运行了以下命令将我的更改推送到远程分支。

% git checkout master
% git pull
% git checkout redactor_changes <-- this is the branch that I made my changes
% git commit -m "changes" # I added my changes previously
% git rebase master
% git push origin redactor_changes # pushed changes to remote branch

不是每个人都有写入权限将更改 merge 到master分支。对远程 repo 有写权限的人告诉我有冲突,做一个 rebase 并再次提交。所以今天我按照确切的顺序运行了以下命令。

vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git add oblog/static/css/styles-custom.css
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git add oblog/static/js/redactor.upload_image.js
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git add oblog/static/images/loading.gif
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git commit -m "Throw a toast when user upload an non-image file with image extension"
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git branch
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git checkout master
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git pull
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git checkout redactor_changes
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git rebase master
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git merge master
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git branch
vagrant@vagrant-ubuntu-trusty-64:~/oblog$ git push origin redactor_changes

看来这组命令把我卷入了一个无法逃脱的漩涡。

症状:

上面代码最后一行抛出如下错误

! [rejected]        redactor_changes -> redactor_changes (non-fast-forward)
error: failed to push some refs to 'https://git.<domain>.com/web/oblog.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.

所以我听从了 SO 同事的建议

  1. https://stackoverflow.com/a/20467414/1431184
  2. https://stackoverflow.com/a/6897674/1431184

但问题依然存在。

标签:

当我使用 master(本地)对我的分支进行 rebase 时,它​​引发了一些冲突,然后我手动修复并执行 rebase --continue。 rebase 成功。然后我再次将我的分支推到原点,它显示了同样的错误,! [拒绝].

按照 git 和 SO 的建议,我继续将远程分支上的更改 pull 到本地分支 (redactor_changes)。然后执行

git rebase master

这让我回到了LABEL。这种情况会一直持续下去。

请注意,如果我不将它与 master rebase ,我的推送命令会起作用,但是远程 git 的所有者在尝试将我的分支 (redactor_changes) merge 到 master 时仍然会看到冲突。

最佳答案

每次将 redactor_changes 分支 rebase 到 master 时,您都会将后一个分支的最新更改带入前一个分​​支。用图来解释:

master:           A -- B -- D
redactor_changes: A -- B -- C

这个简单的图表假设您在 B 提交时从 master 分支。从那时起,您对 redactor_changes (C) 进行了一次提交,而其他人对 master 分支进行了一次提交 (D )。现在,如果您运行以下命令

git checkout redactor_changes
git rebase master

你会得到下图

master:           A -- B -- D
redactor_changes: A -- B -- D -- C'

Rebase 成功地引入了来自 master 的新提交,但它是通过重写 redactor_changes 分支的历史实现的。这是一件好事(可能),因为这意味着审阅者可以快进 master 分支进行您的更改(无 merge 提交)。但它确实有一个副作用。您不能再将 redactor_changes 推送到远程。尝试以下命令

git push origin redactor_changes

会给你你看到的错误信息

! [rejected] redactor_changes -> redactor_changes (non-fast-forward) error: failed to push some refs to 'https://git..com/web/oblog.git'
hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart...

因为你重写了 redactor_changes 的历史,Git 不再知道如何在远程分支上播放提交。

解决方案:

您最可能想要的解决方案是强制您的 redactor_changes 分支到远程:

git checkout redactor_changes
git rebase master
git push --force redactor_changes

执行此操作,错误消息应该消失。这假设 redactor_changes 是一个个人分支并且您不与任何人共享它。

我还注意到您的工作流程存在其他一些问题,例如在已经 rebase 之后将 master merge 到 redactor_changes 中。但是用力 push 至少应该能改善你的处境。

关于Git rebase 显示非快进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902685/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com