在rebase之后,Git分支在远程后面

时间:2015-12-29 00:29:18

标签: git rebase

我遇到了git的问题。 我想在hotfix本地和远程两个分支master分支,所以这就是我所做的。

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

但这会产生与其他反叛之前相同的冲突,而且不应该这样。

我知道我一直都可以这样做:

git push -f

但我会避免被迫推动,因为我与另一个人合作。我想知道我做错了什么。我以为就是这样。

PD。我已经运行了gitk,似乎没有对远程origin/hotfix的引用,只显示了本地hotfix

谢谢!

编辑:我想当我执行rebase时,最后一次提交分支更改以应用rebase更改,这就是为什么它有另一个sha1提交ID。我做了一个覆盖我的本地文件。

git pull --strategy=ours origin hotfix

1 个答案:

答案 0 :(得分:5)

您需要了解的关于rebase的一件事是:

Git将更改每个提交的SHA哈希值,而不是新基本分支的一部分。

这意味着在您重新定位本地分支后,上游分支始终存在冲突,唯一的方法是强行推送到您的上游。

一种常见的做法是不重新推送已经推送到上游的提交。如果只有一个人在分支机构工作,重新定位仍然是好的

在这种情况下,你没有选择,只能进行强制推动。在未来,建议您将工作分支与您的合作者分开,并将混合使用rebase和合并策略来分享您的工作