我有点问题,我不知道该怎么办。我还在学习git,所以我希望你能帮我解决问题。
因此,我在一个相当活跃的存储库中工作。我已经克隆了回购,并提出了一些修改,我必须发布拉请求。
我的设置如下:
我有一个主分支,我更新从上游(设置为主回购主)与一个重基。
对于每一个新的问题,我创建一个新的分支,我修改,推送到github,并申请作为一个公关。这很有效,直到我想用新主人更新我的本地发行分支。
为此,我在本地主服务器上做了一个fetch upstream和rebase,并将主人合并到了我的分支中。接下来,我想推送更改,但是我收到了以下错误:
Updates were rejected because the tip of your current branch is behind在查看了这里的答案之后,我决定运行git pull --rebase和git push,将更改应用到远程问题分支中。
直到这之后,我才意识到我所做的一切。因为在那里有相当多的提交给主主,提交历史充满了我没有做过的提交。
现在有办法解决这个问题吗?如果我能把我的整个发行分支重新定位在最新的大师之上,那就太好了,但是我害怕在这条路上破坏任何东西。
发布于 2014-04-17 20:53:03
假设没有其他人在处理您的问题分支,您只需重写历史并强行推动它。
有时候,解开所发生的事情,以及为什么要付出更多的努力,而不仅仅是从头开始重新创建你的分支。git cherry-pick是您的朋友-这里是如何创建一个新的本地问题分支,只需要提交。
一步一步地假设您的问题分支名为my_issue
1.只是为了备份,保留混乱的版本--复制它:
git checkout -b my_issue_messy2.回到您的my_issue分支来清理它:
git checkout my_issue3.作出相关承诺。
注意您想要保持的提交:以更易读的方式查看日志-- git log --oneline --graph,复制问题修复的SHAs。为了示例起见,让我们假设提交SHA的是1d1f76f、f63193d和d9f2fad。
4.使你的遥控器更新:
git fetch origin5.将my_issue重置为当前的最新主机:
git reset --hard origin/master6.樱桃-一次一次地选择你的承诺:
git cherry-pick 1d1f76f
git cherry-pick f63193d
git cherry-pick d9f2fad轰隆隆!现在您的分支来源于当前主人的状态,而您只有相应的提交。那遥远的分支呢?它会抱怨,因为它不会意识到提交是重复的(选择樱桃更改提交的时间,并给它一个新的SHA)。愿--force与你同在:
git push origin my_issue --force如果一切都很好,而且每个人都很高兴,你可以删除您的本地my_issue_messy分支。
https://stackoverflow.com/questions/23141915
复制相似问题