我正在尝试使用我的featureA分支,同时让它与主分支保持同步。
这是方案
git clone ssh://xxx/repo
git checkout -b featureA
$ git add file.txt
$ git commit -m 'adding file'
$ git push origin featureA
同时有几个新的提交被推送到原始主人
git checkout master
git pull origin master
git checkout featureA
git rebase master
git push origin feature A
To ssh://xxx/repo
! [rejected] featureA -> featureA (non-fast-forward)
error: failed to push some refs to 'ssh://xxx/repo'
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.
如何在不强制服务器接受的情况下进行rebase?
答案 0 :(得分:9)
在变基后你不能推动。提交现在有不同的SHA1,因为它们的历史不同。如果更新的ref不包含其祖先的旧参考,那么这是一个可能有害的操作,git将不允许它。
如果你不想强迫,你唯一的选择是合并。
如果你单独工作并且不需要让其他人投入这个分支,强迫就不那么糟了。
答案 1 :(得分:5)
您的问题的简短回答:您可以通过针对featureA重新设置master(但不要推送)来执行相反的操作,并将featureA重置为该点。
这实际上是将master从master提交到featureA,缺点是你最终会在两个分支上重复提交。它将解决您的直接问题(如果这是您的意图),但从长远来看,您不应该重新定位已经被推送到远程分支的提交。您的方案中的最佳解决方案实际上是合并。