2017-05-24 34 views
1

我犯了一个错误,当我想要分支出一个特性时,我忘了切换到开发分支并从那里创建一个新分支......相反,我在另一个特征分支内创建了一个新分支。当你从错误的分支分支出来并有不需要的提交时该怎么办?

我只是推我的功能分支,我刚刚完成,并意识到有提交从另一个功能分支(我创建的分支),而做拉请求。

我在这种情况下做了什么,因为我现在有一个分支负责从git hub上的另一个功能分支提交?我可以删除它们吗?或者对我来说最好的解决方案是什么?我不是git专家,所以我可能需要帮助我可能需要运行的命令。

谢谢。

+0

你可以看看你的功能分支和'rebase wherever_you_meant_to_branch_from'。删除远程,重新推“。 – castis

+0

我该怎么做,并仍然保持我在我的功能分支中提交的提交? – hugyt7

+0

Rebase切换出您的功能分支所基于的分支。它将倒回你的提交,切换出底层的分支,然后重放你的提交。如果您感到紧张,请将整个项目文件夹复制一份以防万一。 – castis

回答

1

您可以使用rebase命令来编辑您的提交树。例如,考虑到你有如下的提交:

* h121j commit A 
* kj13i commit B 
* alk29 unwanted commit 
* a4b2i commit C 

你可以这样做:git rebase -i a4b2i。它会打开一个编辑器,你将能够简单地删除提交(或者如果你想要的话,标记为编辑)。

pick alk29 unwanted commit 
pick kj13i commit B 
pick h121j commit A 

# Rebase a4b2i..h121j onto a0220ae (3 commands) 
# 
# Commands: 
... 

所有你需要做的就是删除行pick alk29 unwanted commit。保存时,删除的提交行将从提交树中删除。

+0

5个字符的字母数字标识符应该是Git缩写的提交ID吗?他们不应该是十六进制的吗? –

+0

是的@DanielH,但他们是无效的,我只是点击我的键盘的键:) – rougeth

+0

是否有无论如何我可以做到这一点,不知道提交ID,因为我有约10提交删除,它会更容易,只是从一开始就打开这个编辑器? – hugyt7

0

好吧....两个部分:

1樱桃挑不需要提交到你真的希望他们能够

2当地分支机构在复位 - 硬到地方的地方它应该是(没有不需要的提交),然后将其推入远程。事实上,没有必要重新设置 - 在当地很难。您可以通过在远程分支上提供正确的ID来推送:git push --force the-remote right-revision-id:remote-branch

+0

所以我的功能分支被称为feature/validate-messages,并且我从feature/Auth-System创建了它,所以有来自Auth-System分支的feature/validate-messages内的提交,我假设创建validate-messages分支从我的开发分支。所以如果我是正确的,我应该运行这个:'git push --force origin dev:feature/validate-messages'?那会做什么,它会保留我在feature/validate-messages中提交的提交,并只从Auth-System分支中删除提交? – hugyt7

+0

不是。假设有** 3 **提交,它们是功能/验证消息的一部分,您将其放在功能/身份验证系统之上(并且该功能/身份验证系统在本地和远程都正确指向了正确的修订版) 。如果是这样的话:'''git checkout --detach dev; git cherry-pick feature/validate-messages〜3..feature/validate-messages; git branch -f feature/validate-messages; git push -f原始特性/验证消息'''。给或拿。 – eftshift0

+0

好吧,我认为第一个选项似乎更容易,但我有大约10个提交删除,但我怎么会奇才选择10承诺? – hugyt7

相关问题