我有一个问题,我不知道该怎么做。我还在学习git,所以我希望你能帮助我。
所以我在一个非常活跃的存储库中工作。我已经克隆了回购,并提出了一些改变,我必须发布拉动请求。
我的设置如下:
我有一个主分支,我使用rebase从上游(设置为主repo master)更新。
对于每个新问题,我创建了一个我修改的新分支,推送到github并作为PR应用。 这很好用,直到我想用新的主人更新我的本地问题分支。
为此,我在我的本地主人身上做了fetch upstream
和rebase
,并将master合并到我的分支中。
接下来我想推动我的更改,但我收到了这个错误:
Updates were rejected because the tip of your current branch is behind
在查看此处的答案后,我决定与git pull --rebase
一起运行git push
以将更改应用到远程问题分支。
只有在此之后才意识到我所做的一切。由于那里有很多提交给主服务器的提交,因此提交历史记录中充满了我尚未完成的提交。
现在有什么方法可以解决这个问题吗?如果我可以在最新的大师之上重新调整我的整个问题分支,那将是很好的,但我害怕在此过程中打破任何事情。
答案 0 :(得分:4)
假设没有其他人正在处理您的问题分支,您可以重写历史记录并强行推送它。
有时解开发生的事情,为什么比从头开始重新创建分支更省力。 git cherry-pick
是您的朋友 - 在这里您可以创建一个只需要提交的新本地问题分支。
一步一步,假设您的问题分支被称为my_issue
:
git checkout -b my_issue_messy
git checkout my_issue
记下您要保留的提交:以更易读的方式查看日志 - git log --oneline --graph
,复制问题修复的SHA。为了示例,我们假设提交SHA为1d1f76f
,f63193d
和d9f2fad
。
git fetch origin
my_issue
重置为当前最新的主人:git reset --hard origin/master
git cherry-pick 1d1f76f
git cherry-pick f63193d
git cherry-pick d9f2fad
轰!现在你的分支源于当前master的状态,你只有相关的提交。远程分支怎么样?它会抱怨,因为它不会意识到提交是重复的(挑选改变了提交的时间,并给它一个新的SHA)。愿--force
和你在一起:
git push origin my_issue --force
如果一切顺利并且每个人都满意 - 您可以删除本地my_issue_messy
分支。