2014-01-21 87 views
5

几个星期前,我创建了一个功能分支,我正在开发中。还有几个提交和一些新文件。我可以从主分支改变到我的开发分支,反之亦然,一切都很好。git合并后缺少文件

今天我试图将我的分支合并回主分支。因此我改为主人并叫

git merge mydevbranch 

这导致了几个合并冲突。我解决了这些冲突与

git mergetool 

但现在,我意识到,有一些文件中的结果我必须提交。 所以有两个问题:合并后不应该在我的硬盘上存在所有合并的项目吗?我怎样才能获得真正的合并结果(主+我的功能分支)。

+0

如果在master中缺少mydevbranch中存在文件,那意味着您可能在其中一个分支中删除了它们,并选择了错误的一个来保存 – Asenar

+0

该文件在devbranch中是新的 –

+0

does'git log --pretty = oneline - -stat --all path/to/missing/files'给你有趣的输出?另外,你确定你“git add && git commit”他们吗?如果您签出到开发分支,那么再次执行这些文件? – Asenar

回答

0

对于你的第一个问题:合并后不应该有我的硬盘上的所有合并项目?

我对自己的环境做了一个实验。它具有和你一样的效果。所以我的结论是,如果合并具有相同文件的开发分支,则在主分支中删除的文件将不会返回到主分支中。

我认为这是有道理的。假设您已经删除了主分支中的大量不需要的文件并提交了这些清除。然后你合并拥有所有不需要文件的开发分支。如果所有这些不需要的文件再次被“添加”到主分支中,您可能会因为需要花时间再次删除它们而感到不安。

1

检查是否有没有在藏匿

 
git stash pop 

为新文件,请务必先添加它们(GIT状态应该列出)

 
git add 

最好的文档有关的蠢货,包括分支机构:http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

+0

没有任何东西存在。该文件在dev分支内承诺了几个星期,我已经阅读了本书的全部内容。但没有成功。 我切换到主,调用合并命令,并有一些文件丢失。只要没有所有文件存在,我都不会提交(这对我来说似乎是正确的)。 –

0

不可能以这种方式丢失文件。

你可以试试这个替代:

git checkout mydevbranch 
# following command to find the previous state easier if you are not familiar with reflog 
git branch tmp-checkpoint 
git rebase master 

然后解决冲突。如果文件仍然丢失,可以使用git bisect(查看手册页)找到它们消失的点

3

经过一番调查后,我发现了以下内容。在创建分支之前,我在主文件中添加了该文件(这就是为什么它在我的开发分支中)。但是现在这个疯狂的东西:这个文件在一位同事之后被主人删除,但没有任何状态信息。状态日志仅显示文件的创建。所以合并是正确的,但由于缺少状态信息,我无法理解。