javascript - git : How to move git folder inside subfolder and rewrite history to pretend it always was like that?

标签 javascript git version-control branch git-filter-branch

我错误地将我的 .git 文件夹放在了比需要更高的位置:

Folder1/
    .git <-- currently here
    myproject/
        .git <--- should be here

我想将它移到 myproject 中,但是当我从那里查看旧提交时,它会破坏向后兼容性...

有没有办法保持一致?也许通过重写历史/假装它总是那样?我想这可以用 git filter-branch --tree-filter 来完成,但不确定怎么做?

最佳答案

由于您将 .git 文件夹移动到 myproject 文件夹,git 无法从其原始相对路径检测到该文件,但会找到新相对路径中存在的文件,所以 git status 将报告原始文件已删除并有新文件。

比如移动.git文件夹之前,在git repo中git跟踪myproject文件夹下的文件为root/myproject/*。移动.git 文件夹后,myproject 文件夹下的文件现在位于git repo 的根目录下(root/*)。所以 git 检测到它们是新文件(未跟踪)并认为 root/myproject/* 中的文件不再存在(已删除)。

并且由于 git 存储库仅供您自己使用,您可以提交更改目录。如果你想删除 .git 文件夹在 Folder1 下的原始提交历史,你可以使用 git rebase -i 来放弃一些提交

如果你想保留 myproject 文件夹下文件的提交历史,你不应该移动 .git 文件夹,而是移动 下的文件和文件夹>Folder1 而在 myproject 文件夹 之外。

关于javascript - git : How to move git folder inside subfolder and rewrite history to pretend it always was like that?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47465187/

相关文章:

javascript - 隐藏 <div> onload 并显示点击事件无法正常工作

git - git 是否将无法访问的对象推送到远程

java - 管理分支机构中的不同客户代码

javascript - 合并两个对象但保持继承

javascript - 插值 float

javascript - 在饼图悬停时隐藏文本

git merge branch 和未提交的更改到 master

git - 如何让 git 跟踪新文件,而不仅仅是现有文件?

version-control - 在版本控制模型领域做了哪些工作?

linux - 配置本地SVN