2014-12-10 69 views
0

环顾四周之后,我很惊讶这个问题没有得到解答,因为我的具体问题已经解决了。将属于分支子目录的提交合并为主

我有一个存储库有两个分支,其中一个是master分支,它也发布到远程存储库。

我的第二个分支叫做preparation,我在过去查过这个,并做了一些提交。不幸的是,我提交了一个我不想公开公布的子目录。
虽然有一些变化,这将有助于拉入主。这些更改只属于preparation分支的子目录。

下面是提交历史记录的图片。我基本上犯了错误,将更改提交到分支preparation的子目录中,我现在不想在master中拥有该子目录,也不需要远程存储库。

我能做些什么有提交历史,而不是虚假的承诺?

谢谢!

+0

如果到达所有可能有错误提交的人都很容易,并且他们没有机会投入太多资源,只需'git checkout -B prepare':/添加日期'',提交您应该拥有的提交制作,强制推送并让每个人都重新获取。 – jthill 2014-12-10 23:57:58

+0

很难解析你所问的。不知道分支的子目录是什么意思,因为分支不是CVS/SVN中的目录。您是否希望将一个分支中的更改添加到不同分支中的其他位置?相同的承诺会发生好的变化吗?如果是这种情况,你可能需要一个互动的樱桃选择。 – 2014-12-10 23:59:58

回答

2

我不知道,但也许你只是想删除一个提交标记从您计划合并历史的“新对话”。

如果是这样,您可以使用交互式重新装订。要在交互式重新绑定期间跳过一次提交,只需将其从提交列表中删除即可。

我认为犯下的“新对话”被提交五号当您运行git log。 我还假设你的回购是干净的。

这是程序。

首先创建一个名为new-preparation新的分支(以防万一出了差错):

git checkout -b new-preparation preparation 

现在运行交互式衍合:

git rebase -i HEAD~5 
与显示过去五年修订

的Git应该启动Vim (你想摆脱的那个应该在最上面):

pick SHA-1 - oldest of five commits - the one labelled "New talk" 
pick SHA-1 
pick SHA-1 
pick SHA-1 
pick SHA-1 - newest of five commits 

删除第一行。 vim的内容应该如下所示:

pick SHA-1 
pick SHA-1 
pick SHA-1 
pick SHA-1 - newest of five commits 

保存文件并退出。

Git应该重新绑定剩下的四个提交。

你现在应该有你的分支没有提交“新话题”。

1

我不认为你明白git是如何工作的。这是可怕的混淆你所描述的。

您无法提交对目录或子目录的更改。跟我说:改变致力于分支。

你犯的错误是混合了一个分支用于不相关的提交。分支机构git很便宜。一个最佳做法是为您工作的每个功能创建一个branch

除此之外,让我们假设在您发现需要进行此更改并希望它在两个位置均已修复之前,您确实需要先前的工作才能出席。

这是相当常见的,并已以多种不同的方式回答。你将需要做一个rebase-on提交。 看看为底垫git的书文档:http://git-scm.com/book/ch3-6.html

总之,要采取提交从某一点进步,但跳过了一堆要合并到你的分支的共同祖先与现货之间的提交。

在这种情况下,假设它只是一个承诺你将需要做这样的事情: git rebase --onto origin/master HEAD~ preparation

这么说,我建议您阅读第一材料和取得的你在做什么的理解。

相关问题