我正在使用一个中间的Git存储库来镜像一个远程SVN存储库,人们可以从其中进行克隆和工作。中间存储库的主分支每晚从上游SVN重新定位,我们正在处理功能分支。例如:
remote:
master
local:
master
feature
我可以成功地将我的功能分支推送回遥控器,并最终得到我期望的结果:
remote:
master
feature
local:
master
feature
然后我重新设置分支来跟踪遥控器:
remote:
master
feature
local:
master
feature -> origin/feature
一切都很好。我想从这里做的是将feature分支重新设置为远程主机上的主分支,但我希望在本地计算机上执行此操作。我希望能够做到:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
使远程功能分支与远程主节点保持同步。然而,这种方法会导致Git抱怨:
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull
做到了这一点,但却导致了我想要避免的合并提交。我担心消息声明的是feature -> feature
而不是feature -> origin/feature
,但这可能只是一个表示问题。
我是不是错过了什么,或者以完全错误的方式来做这件事?避免在远程服务器上执行rebase并不重要,但这会使修复来自rebase的任何合并冲突变得更加困难。
发布于 2011-06-02 00:49:52
归根结底,这个功能是由一个人使用的,还是其他人正在使用它的。
如果只有你一个人,你可以在rebase之后强制推送:
git push origin feature -f
但是,如果其他人正在处理它,您应该合并,而不是从master重新建立基础。
git merge master
git push origin feature
这将确保您与与您合作的人有共同的历史。
在不同的层面上,你不应该做反向合并。你所做的是用其他不属于该功能的提交来污染你的功能分支的历史记录,使得后续的工作变得更加困难-不管是不是重新建立基础。
这是我的一篇题为branch per feature的文章。
希望这能有所帮助。
发布于 2011-06-02 03:24:01
很高兴你提出了这个话题。
这是git中一个重要的东西/概念,许多git用户将从了解中受益。git rebase是一个非常强大的工具,可以让你一起挤压提交,删除提交等。但和任何强大的工具一样,你基本上需要知道你在做什么,否则可能会出现真正的错误。
当您在本地工作并处理本地分支时,只要您没有将更改推送到中央存储库,就可以做任何您想做的事情。这意味着你可以重写自己的历史,但不能重写其他人的历史。通过只摆弄你本地的东西,任何东西都不会对其他库产生任何影响。
这就是为什么重要的是要记住,一旦你推送了提交,你就不应该在以后重新建立它们的基础。这很重要的原因是,其他人可能会把你的提交工作拉进来,并将他们的工作建立在你对代码库的贡献上,如果你后来决定将内容从一个地方移动到另一个地方(重新建立基础)并推动这些更改,那么其他人就会遇到问题,不得不重新建立他们的代码基础。现在假设你有1000名开发人员:)这只会导致大量不必要的返工。
发布于 2011-06-01 20:19:38
因为您在新的master
之上重新建立了feature
的基础,所以您的本地feature
不再是origin/feature
的快进。所以,我认为,在这种情况下,完全可以通过执行git push origin +feature
来覆盖快进检查。您也可以在配置中指定这一点
git config remote.origin.push +refs/heads/feature:refs/heads/feature
如果其他人在origin/feature
上工作,他们会受到这种强制更新的干扰。您可以通过将新的master
合并到feature
中而不是重新设置基址来避免这种情况。结果确实是快进的。
https://stackoverflow.com/questions/6199889
复制相似问题