Git merge删除空包

时间:2019-05-31 18:52:21

标签: git bitbucket

我已将Java应用程序推送到一个bitbucket存储库,其中包括几个空包。从master分支创建了两个开发分支,并将某些类添加到了不同的包中。当我尝试合并本地开发分支中的另一个分支时,没有冲突出现,但是我的包被删除了。我可以在错误日志中看到我的提交,甚至可以通过Verion Control窗口在IntelliJ中打开我的类,但是它们被合并提交删除。

如何恢复我的更改?我不能选择提交,因为它已经包含在分支中。 Git重置也不起作用。如果没有其他事情要做,我可以重新创建相同的类并逐个复制更改,但是必须有更好的解决方案。

1 个答案:

答案 0 :(得分:-1)

发生这种情况是因为有人(大概不是您)删除了代码。

请记住,合并并不意味着使它们相同。您告诉Git:

git checkout somebranch
git merge anotherbranch

这并不意味着somebranch中进行一次新提交,使其与anotherbranch 中的最后一次提交完全匹配。而是告诉Git:

  • somebranch的提示处 或之前找到一些提交,也在anotherbranch的提示处 之前。任一提示之前的提交都必须在两个分支上,并且应该是最佳共同祖先。 Git将此提交称为合并基础

  • 现在我们知道,也许是制造somebranch的人(也许是我们)始于commit B (以base为基础),而制造anotherbranch的人(也许是我们改为 从提交 B 开始,将提交 B somebranch的尖端进行比较,以查看我们/他们所做的更改。然后,将 B anotherbranch的尖端进行比较,以了解它们/我们所做的更改。

现在,合并合并这两组更改。为了使合并决定应该{em>删除文件somedir/somepackage.java,从 B 到一个提示的更改必须是:什么都不做< / em>。从 B 到另一个提示的更改必须是:删除文件somedir/somepackage.java 。这两个更改的组合很明显:删除文件!

因此,正确的合并结果-表示删除文件somebranch的人S所做的更改与{{1 }}谁也没说什么,就是删除文件,而Git做到了。 (或者,如果我交换了两个分支,没关系:这仍然是自动正确的结果。即使通过您比Git聪明的人工评估,这对Git也是正确的。)

在合并之前的两次提交之一以及在基于合并的提交中,文件仍是完整完整的完整文件。 (显然,另一个中不存在。)只需从具有它的任何提交中将其提取。这些提交仍然存在,并且永远将所有文件保持在提交状态:这就是为什么要使用版本控制系统来保存每个人所做的一切的原因。

取回文件

要从提交 H (其中anotherbranch是一些提交哈希,例如H)中获取路径为 P 的文件,请运行:< / p>

a123456

例如git checkout H -- P。这将提取提交中的副本,并将其放入索引(准备下一次提交)和工作树(准备查看中)。