git - 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
被删除了......知道它为什么会发生以及它是否可以避免?
解决方案
如果合并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
将找到删除它的提交,^
在那个输出的末尾添加一个,这是它被删除之前的最后一个提交。
推荐阅读
- c++ - 关于用括号括起来的声明类型是什么的问题
- java - 如何根据偏航,俯仰和滚动值旋转处理中的对象
- ios - 安装了 FB 应用程序的 SwiftUI 自定义 Facebook 登录
- docker - 在 cmd 或 powershell 中从 Windows 10 主机运行 Docker 容器内的脚本
- sql - N 个项目的 SQL DB 结构,其中 M 个参数随时间变化
- python - 熊猫:计算不同字母在单元格中出现的频率
- r - R:为网络分析准备数据
- python - 将字符串列转换为 pandas DataFrame 中的布尔指标列
- blazor - 无法在源选项卡的 chrome 可调试窗口中找到 Blazor 文件
- python - 使用 DST 小时查找 timedelta 差异(Python)