Github上的某个用户拥有一个包含单个主分支的存储库。我已将该存储库分配到我自己的帐户中。我在自己的分叉存储库上创建了一个新分支,并对其进行了一些更改。
上游用户已将更改提交给他们的主人。我希望通过这些更改来更新我的主人。另外,如果我正确理解rebase
,我希望rebase
我的分支在该主人身上。我不想与master合并,因为我还没有完成我的分支。注意:上游更改的文件与我在分支中更改的文件不同,因此不应存在冲突。
我尝试了以下内容:
我拉从上游用户更改为我的本地仓库:
git pull upstream master
我推送从我的本地主人改为我的分叉主人:
git push origin master
我在我当地的主人身上重新定位我当地的分行:
git checkout mybranch
git rebase master
我尝试将我的重新定位的本地分支推送到我的分支分支:
git push origin mybranch
但是,我收到以下错误:
To https://github.com/myusername/myforkedrepository.git
! [rejected] mybranch -> mybranch (non-fast-forward)
error: failed to push some refs to 'https://github.com/myusername/myforkedrepository.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
请注意origin
是我的分叉存储库,upstream
是原始存储库。
stackoverflow上有类似的问题提出了一个稍微简单的方法:
git fetch upstream
git rebase upstream/master
这没有给出任何错误,但它也没有向我的远程分支推送任何东西。在尝试了上述之后,我再次尝试了
git push origin mybranch
但同样的错误仍然存在。
我将如何做我想做的事?
答案 0 :(得分:2)
这就是我理解你的情景的方式:
[upstream repo] ==> [forked repo] <==> [local repo] master master master mybranch
箭头表示提交的方向流。
考虑到上述情况,您已经问过如何实现所需的开发流程,让您的更改始终保持最佳状态。
总体而言,分叉和本地存储库上的主不可避免地偏离上游主服务器,如果它们是要在中包含更改> mybranch 主题分支。
然而,当您在问题中勾勒出更改完全不相交时,您可以确实在合并或拉动时通过重新定位和快进来保持您的更改集。
0] local master $ branch mybranch off master 1] fork master $ git pull --rebase 2] local master $ git pull --rebase 3] local mybranch $ commit commit commit 4] local mybranch $ git rebase master
在开发流程中根据需要重复1-4或3-4次。当您准备将工作发布到 forked repo master 时,上游主服务器和分叉主服务器将不同步,但是只要你遵循1-4,你应该能够永远保持你的变化。
5] local master $ git merge --ff-only mybranch 6] local master $ git push origin
然后根据需要再次重复1-4次。
谨慎一点。为了实现这一点,您可能需要将分支(或者可能重新克隆您的存储库)重置为“干净”状态,此时您还没有合并和/或推送 mybranch <上的任何更改< / em>到本地或分叉主。
答案 1 :(得分:0)
这是因为您之前已经发布了mybranch
分支。
解决方案很简单:只是不要。您想要更改已发布的历史记录,这绝不是一个好主意!对于已经在公共mybranch
分支机构工作的其他开发人员而言,这可能会导致非常难看的错误。
技术解决方案是:git push --force origin mybranch
或删除远程分支并使用git push origin :mybranch
和git push origin mybranch
但如果已发布mybranch
,则不应该这样做。