首页 > 解决方案 > git mv 文件夹并随后将新文件从功能分支合并到修改后的路径,是否会删除其历史记录?

问题描述

我有以下情况:

合并前的主要分支:

│   └── dir1
│   │   └── python1
│   │   │   └── test1.py
│   └── dir2
│   │   └── python2
│   │   │   └── test2.py
│   └── dir3
│   │   └── python3
│   │   │   └── test3.py

合并后的主分支:

│   └── dir1
│   └── dir2
│   │   └── python1
│   │   │   └── test1.py
│   │   └── python2
│   │   │   └── test2.py
│   │   └── python3
│   │   │   └── test3.py
│   └── dir3

合并前的功能分支(test4.py历史记录中有 10 次提交):

│   └── dir1
│   │   └── python1
│   │   │   └── test4.py

从功能分支合并后的主分支(使用git merge -s ort和解决不存在的冲突test4.py):

│   └── dir1
│   └── dir2
│   │   └── python1
│   │   │   └── test1.py
│   │   │   └── test4.py
│   │   └── python2
│   │   │   └── test2.py
│   │   └── python3
│   │   │   └── test3.py
│   └── dir3

问题是所有的历史都test4.py被删除了......知道它为什么会发生以及它是否可以避免?

标签: gitgit-merge-conflictconsolidationgit-historygit-mv

解决方案


如果合并dir1/python1/test4.py从您的目标树中删除,那么您合并的分支删除了该文件。但我现在看到它只是移动了它。如果您想查看该文件的历史记录,

gitk --follow -- dir2/python1/test4.py

如果它还没有变得面目全非,它将向您展示。-M50如果它发生了很大变化,您可以尝试添加,并--full-history检查对主线没有任何影响的祖先,以防万一您希望看到被放弃或以其他方式结束的更改与 Git 已经向您显示的更改相同..

git blame总是运行--follow(这通常是想要没有人教它任何这样做的选项),但你必须寻找一个拥有它的提交。

如果一个文件不只是被移动而是实际上被删除了,如果它现在不存在,git log -1 --pretty=%h -- path/to/that/test4.py将找到删除它的提交,^在那个输出的末尾添加一个,这是它被删除之前的最后一个提交。


推荐阅读