Git在将旧分支合并到主分支时不应用已删除的文件。如何让Git应用已删除的文件?
我有一个硕士和一个开发分支。 我在这两方面都做出了承诺。 我还删除了dev中的一些文件。 我在master中进行了其他提交,所以这个master分支是最近的 我的问题是,将dev合并到master不会删除文件Git在将旧分支合并到主分支时不应用已删除的文件。如何让Git应用已删除的文件?,git,git-merge,Git,Git Merge,我有一个硕士和一个开发分支。 我在这两方面都做出了承诺。 我还删除了dev中的一些文件。 我在master中进行了其他提交,所以这个master分支是最近的 我的问题是,将dev合并到master不会删除文件 Git认为这些文件存在于主机中,因此,在合并过程中保持它们。 我如何合并这两个分支并强制Git应用在dev中进行的所有提交?包括已删除的文件 谢谢你的帮助 您可以在不提交的情况下运行合并,确保拥有所有正确的文件,然后运行提交 执行合并 git checkout master git me
Git认为这些文件存在于主机中,因此,在合并过程中保持它们。
我如何合并这两个分支并强制Git应用在dev中进行的所有提交?包括已删除的文件谢谢你的帮助 您可以在不提交的情况下运行合并,确保拥有所有正确的文件,然后运行提交
git checkout master
git merge --no-commit dev
git commit
2个文件已更改,2个插入(+)
创建模式100644 1.txt
创建模式100644 2.txt 创建新分支并添加/删除一些文件 切换到新分支“新建” 在新的分支上
要提交的更改:
(使用“git重置磁头…”取消分级) 已删除:2.txt
新文件:3.txt [new db6b1a0]新数据库中的更改
2个文件已更改,1个插入(+),1个删除(-)
删除模式100644 2.txt
创建模式100644 3.txt 在master中提交更多更改 切换到“主”分支 [master 912a520]更新master
1个文件已更改,1个插入(+) .
├── 1.txt
└── 2.txt 验证文件是否仍在新文件中删除 切换到“新”分支 .
├── 1.txt
└── 3.txt 将新文件合并到主文件中 切换到“主”分支 删除2.txt
通过“递归”策略进行合并。
2.txt|1-
3.txt|1+
2个文件已更改,1个插入(+),1个删除(-)
删除模式100644 2.txt
创建模式100644 3.txt .
├── 1.txt
└── 3.txt
如您所见,在合并之后,在新的
分支中删除的文件2.txt
现在肯定会在master
中删除。我能理解这种可能情况的唯一方法是,如果您在独立的分支中创建了两个不同的文件,每个文件名相同
i、 e.假设master
和dev
分支已经存在
创建并提交file.txt
到master
签出dev
,然后再次创建并提交file.txt
到dev
。现在,由于您已经创建了两个不同的文件,git将它们视为两个独立的实体,尽管文件名相同,这完全违背了版本控制的目的
稍后从dev
将dev
合并到master
,low and seekfile.txt
仍然存在于master
中,这很有意义,因为正如我所说,git认为这两个文件是完全独立的
注意如果您没有从dev
中删除file.txt
并尝试合并,那么您可能会遇到合并冲突,因为git不知道如何处理具有相同路径/文件名的两个不同实体
如果这是你的情况,那么我会冒着傲慢的风险说你做错了;)
版本控制系统的目的是让该工具管理不同时间阶段文件之间的差异,以及这些更改与存储库中其他文件之间的关系
在这种情况下,我建议改进工作流,从其他分支签出特定文件:
创建并提交file.txt
到master
签出dev
,然后从另一个分支获取特定文件
git checkout master -- file.txt
在这种情况下,您仍将在dev
分支上,但现在已经从master
分支添加了file.txt
现在git认识到它们是同一个实体。因此,您可以在dev
将dev
合并到master
中,现在将从master
中删除file.txt
我也有同样的问题。在我的例子中,我认为问题在于,当我进行合并时,与远程分支相比,我的合并自分支的副本已经过时。(删除的是同事,不是我)
在任何情况下,修复它的是删除整个工作副本并重新克隆它。有趣的是,您使用的是git应用程序还是仅从命令行?我使用的是cmd行这不是我的工作方式。当与分支中的更改没有冲突时,合并肯定会删除文件。您可能有一个特殊的默认值来产生这种行为。如果文件在待合并分支中被删除,git在合并期间不会保留这些文件。你有一个不同的问题。非常感谢这些细节。我将尝试签出已删除的文件并再次合并git。谢谢你的提示。这一直是我的问题。在不同的时间在不同的分支中创建相同的精确文件,并且它们也不存在于分支的底部。我花了好几天的时间才意识到…这就是为什么
mkdir test
cd test
git init
echo one > 1.txt
echo two > 2.txt
git add .
git commit -m "init repo"
git checkout -b new
echo three > 3.txt
rm 2.txt
git add .
git status
git commit -m "changes in new"
git checkout master
echo update >> 1.txt
git commit -am "update master"
tree
git checkout new
tree
git checkout master
git merge new master
tree
git checkout master -- file.txt