Git rebase和推错误

时间:2014-04-17 19:34:49

标签: git github

我有一个问题,我不知道该怎么做。我还在学习git,所以我希望你能帮助我。

所以我在一个非常活跃的存储库中工作。我已经克隆了回购,并提出了一些改变,我必须发布拉动请求。

我的设置如下:

我有一个主分支,我使用rebase从上游(设置为主repo master)更新。

对于每个新问题,我创建了一个我修改的新分支,推送到github并作为PR应用。 这很好用,直到我想用新的主人更新我的本地问题分支。

为此,我在我的本地主人身上做了fetch upstreamrebase,并将master合并到我的分支中。 接下来我想推动我的更改,但我收到了这个错误:

Updates were rejected because the tip of your current branch is behind

在查看此处的答案后,我决定与git pull --rebase一起运行git push以将更改应用到远程问题分支。

只有在此之后才意识到我所做的一切。由于那里有很多提交给主服务器的提交,因此提交历史记录中充满了我尚未完成的提交。

现在有什么方法可以解决这个问题吗?如果我可以在最新的大师之上重新调整我的整个问题分支,那将是很好的,但我害怕在此过程中打破任何事情。

1 个答案:

答案 0 :(得分:4)

假设没有其他人正在处理您的问题分支,您可以重写历史记录并强行推送它。

有时解开发生的事情,为什么比从头开始重新创建分支更省力。 git cherry-pick是您的朋友 - 在这里您可以创建一个只需要提交的新本地问题分支。

一步一步,假设您的问题分支被称为my_issue

1。只是为了备份,保持凌乱的版本 - 制作它的副本:

git checkout -b my_issue_messy

2。回到你的my_issue分支来清理它:

git checkout my_issue

3。获得相关提交。

记下您要保留的提交:以更易读的方式查看日志 - git log --oneline --graph,复制问题修复的SHA。为了示例,我们假设提交SHA为1d1f76ff63193dd9f2fad

4。让你的遥控器更新:

git fetch origin

5。将my_issue重置为当前最新的主人:

git reset --hard origin/master

6。樱桃 - 一次一个地提取您的提交:

git cherry-pick 1d1f76f
git cherry-pick f63193d
git cherry-pick d9f2fad

轰!现在你的分支源于当前master的状态,你只有相关的提交。远程分支怎么样?它会抱怨,因为它不会意识到提交是重复的(挑选改变了提交的时间,并给它一个新的SHA)。愿--force和你在一起:

git push origin my_issue --force

如果一切顺利并且每个人都满意 - 您可以删除本地my_issue_messy分支。