4

我正在尝试重命名在六次提交之前和所有后续提交中引入的目录。这些提交尚未推送。

我尝试了什么?

  • 我尝试过使用git filter-branch命令mv old new,但之前提交失败,HEAD~6因为目录不存在。
  • 我试过git rebase -i HEAD~6,编辑每个提交,但我不能使用mv old new,因为 git 锁定了文件,我也不能在 Windows 资源管理器中重命名它。
  • 我已经尝试过相同的变基,cp -R old new; rm -rf old; git add new但这会在HEAD~4上面产生合并冲突。

可能值得注意的是,引入该目录的提交是该分支中的第一个提交(该分支mastermaster.

我也读过这个问题

最好的方法是什么?

4

3 回答 3

3

git filter-branch应该可以正常工作;只需通过附加 . 使mv命令优雅地失败|| true。例如,要重命名baz/foo/bar/baz/

git filter-branch --force --tree-filter \
    'mkdir -p foo/bar; mv baz foo/bar/ || true' \
    --tag-name-filter cat -- --all
于 2014-10-30T00:11:43.263 回答
2

https://git-scm.com/docs/git-filter-branch状态:

要将整个树移动到子目录中,或从那里删除它:

git filter-branch --index-filter \
    'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
            git update-index --index-info &&
     mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
于 2016-09-19T14:47:21.290 回答
0

为什么不简单地启动一个新分支(在 master 上),然后在 ~N 处的旧分支和新分支之间进行简单的交换,并连续选择 6 个提交。

例如git cherry-pick& git mv old new& git commit

它可能不够“快”,但只需 6 次提交即可修复。

于 2013-10-08T19:33:40.837 回答