我遇到了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
答案 0 :(得分:5)
您需要了解的关于rebase的一件事是:
Git将更改每个提交的SHA哈希值,而不是新基本分支的一部分。
这意味着在您重新定位本地分支后,上游分支始终存在冲突,唯一的方法是强行推送到您的上游。
一种常见的做法是不重新推送已经推送到上游的提交。如果只有一个人在分支机构工作,重新定位仍然是好的。
在这种情况下,你没有选择,只能进行强制推动。在未来,建议您将工作分支与您的合作者分开,并将混合使用rebase和合并策略来分享您的工作