我应该 git mv 还是只是 mv 我正在从另一个目录挑选/变基的文件?



我有一些csv文件,我定期修改,它们实际上不包含任何敏感信息,它们只是用作程序的导入,我根据要求修改它们。

最近,我找到了处理更改的更有效方法,但我在项目外的临时 git 存储库上对其进行了测试。

由于这很成功,我现在想git cherry-pick它的更改范围,所以首先我将临时 git 存储库作为远程添加到我的项目中。

# In my project I added a remote of the test repo with 
# a copy of the csv's in the HEAD of my main project.
git remote add tempchanges <path-to-test-repo>
# Created a new branch in my project to test this out in.
git checkout -b new/9_30_2019
# Cherry-picked the changes from the remote test repo, but they ended up in the root of the project.
git cherry-pick <start-commit-in-test-repo>..<head-commit-in-test-repo>
# Started a rebase
git rebase -i <start-commit-in-test-repo>~1
# (`edit`ed each commit in the rebase)

(事后看来,我认为这是一个错误,我应该在现有项目中再剪一个分支,但我跑题了(

临时仓库只有一个主分支,并且所有操作都在项目根目录中跨一系列提交完成。

当我将更改cherry-pick到我的项目和本地分支中时,csv文件最终都位于项目的根目录中,但它们属于项目的src/csv文件,因此我决定从提交范围(减去 1 次提交(开始执行交互式rebase并编辑每个提交,以便更改显示在我的项目存储库中src/csv目录而不是根目录中。

但我的问题是,如果我想这样做,我应该使用git mv来移动文件还是只使用标准的 bashmv命令,然后使用变基重新应用每个更改,并将相应的提交消息添加到临时项目中。

到目前为止,我已经尝试了在第一次提交时移动文件git mv -f,当我在运行git rebase --continue之前提交它们时,甚至没有提到这些更改。

我应该做些什么来使这个过程更顺利,我假设我应该使用mv而不是git mv -f因为更改似乎在提交之前以这种方式显示。

我还想保留提交消息,而不必从旧存储库中的日志中复制它们。

git mv没有什么神奇的事情。Git 不记得重命名,而是从文件的内容中推断出它们。您可以使用git mv也可以使用mv然后git add更改。

git mv some.csv src/some.csv

相当于

mv some.csv src/some.csv
git add some.csv src/some.csv

"添加"已删除的文件有点奇怪。您正在将更改"添加"到暂存区域,此更改恰好是删除文件。

您所做的更改,将

文件移动到子目录,可以使用git filter-branch一次完成所有更改。

git filter-branch --index-filter 'git mv *.csv src/' <range of changes>

相关内容

  • 没有找到相关文章

最新更新