重置后,Git分支落后于远程分支

8

我在使用git时遇到了问题。我想要将分支hotfix在本地和远程都基于master进行rebase,这是我的操作:

git checkout hotfix
git pull hotfix              #just getting someone changes
git fetch origin master
git rebase origin/master

经过长时间解决冲突和重建项目,我已经使其正常工作,所以我必须将更改上传到远程分支。

git push origin hotfix

这是Git的想法:

$ git push origin login2
To https://name@bitbucket.org/***/***.git
 ! [rejected]        hotfix -> hotfix (non-fast-forward)
error: failed to push some refs to 'https://name@bitbucket.org/***/***.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.

我已经尝试过:

git pull --rebase

但这样会和之前的rebase一样出现冲突,这是不应该的。
我知道我总是可以执行:
git push -f

但是我希望避免强制推送,因为我和另一个人一起工作。我想知道我做错了什么。我以为那就是方法。

附注:我运行了gitk,看起来没有提到远程origin/hotfix,只有本地的hotfix出现。

谢谢!

编辑:我猜当我重新基于分支时,最后一个提交更改以应用rebase更改,这就是为什么它有另一个sha1提交ID的原因。我进行了覆盖本地文件的拉取。

git pull --strategy=ours origin hotfix
1个回答

18

关于rebase,您需要知道的一件事是:

Git会更改每个不属于新基础分支的提交的SHA哈希值。

这意味着,在你将本地分支rebase到上游分支后,总会与上游分支产生冲突,唯一的解决办法是强制推送到上游。

一个常见的做法是不对已经推送到上游的提交进行rebase。如果只有一个人在一个分支上工作,则rebasing仍然可以 接受

在这种情况下,您别无选择,只能进行强制推送。将来建议将您和协作者的工作分支保持独立,并采用rebase和merge策略混合使用以分享您的工作。


1
是的,正如我在编辑中所说的那样,我意识到这一点太晚了。我忘记了不要对已推送的提交进行变基的规则。我应该进行合并。我通过合并和覆盖我的本地文件来解决它。谢谢,现在我不会再忘记了。 - Gonzalo

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