git mv 文件夹,然后将新文件从功能分支合并到修改后的路径,删除其历史记录?

Does git mv folder and merge afterward new file from feature branch to the modified path, deletes its history?

我有以下情况:

合并前的主要分支机构:

│   └── 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 history has 10 commits in history):

│   └── 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 的所有历史记录都被删除了...知道为什么会发生以及是否可以避免?

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

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

如果它还没有变得面目全非,我会给你看。你可以尝试添加 -M50 如果它有很大的变化,并且 --full-history 来检查最终对主线没有任何影响的祖先,以防你想看到被放弃的变化或否则最终与 Git 已经向您展示的变化相同..

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

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