Git合并丢失了一些文件

  • 本文关键字:文件 合并 Git git
  • 更新时间 :
  • 英文 :


我有两个git分支。一个是"大师";他有很多材料。另一种叫做"简单"。当我最初克隆"simple"的时候从"master"中,我从"Simple"中删除了很多文件,所以"Simple"是"master"的简化版。几周后,在"simple"上完成了一些工作。当我切换到master时;分支和尝试

git merge simple

我注意到我的一些代码,但不是全部(不在"simple"分支)目前丢失。我必须重置到一个预合并的承诺来找到所有的文件

让我知道该怎么做

当Git执行合并时,它会考虑三个点:合并的两个头(在本例中是simplemaster)和第三个点,称为合并基,它通常是这些提交的共同祖先。

如果您在合并基和头之间的一个分支上做了更改,而您没有在另一边做更改,那么该更改将包含在最终的合并中。在您的示例中,更改是删除一个文件,结果是该文件被删除。

如果你想应用从simplemaster的更改而不包括删除的文件,那么你需要将simple检出到另一个分支(git checkout -b temp simple)并进行交互式重基(git rebase -i master),排除删除文件的提交。然后,temp将是master的扩展,并在上面应用simple的相关提交。然后你可以签出master并运行git merge temp(与--ff-only--no-ff一起运行,取决于你是否想要合并提交),然后你的更改将被合并到' master '中。

如果您希望合并到mastersimple上的所有提交都发生在删除分支simple上的文件的提交之后,(从您的描述中听起来好像是真的),那么有一个简单的解决方案:

使用git log simple来确定包含不希望发生在分支master上的删除的最后一个提交ID。我们把它命名为abcd1234

现在,签出master并按此顺序执行以下两次合并:

git switch master
git merge --strategy=ours abcd1234 -m "Merge branch simple without deleting files"
git merge simple

第一个merge命令告诉Git引入simpleX上的所有提交id,但不进行任何更改。第二次合并将合并simple上的其他提交,这些提交具有您希望带入master的实际更改。

最新更新