不知何故,当我git init在大约一个月前编辑我的最新项目时,我在目录中运行了一个高于项目根目录的目录.
所以我的存储库位于./project目录而不是./project/my-new-project目录中.我不知道我之前没有意识到这个问题,但直到现在我才从未找过.git目录.
有没有办法,没有杀死我的项目,将存储库移动到正确的目录,然后告诉git项目的新基础是什么?只是移动目录不起作用.Git认为所有文件都已删除.
Abh*_*and 240
我有相反的问题 - 不得不将git root转移到父目录(从project/src到project)令我极为惊讶,以下工作!
src$ mv .git ../
src$ cd ..
project$ git add src
project$ git commit -a
Run Code Online (Sandbox Code Playgroud)
git巧妙地检测到所有新文件都被重命名为旧文件的版本,并且没有丢失历史记录
您可以尝试类似的东西...移动.git文件夹并在提交之前再次添加文件
hol*_*sal 39
这对我有用,并保持我的所有历史完好无损.从不正确的根文件夹(您意外初始化repo的父级):
移动文件夹:
mv .git thecorrectfolder/
Run Code Online (Sandbox Code Playgroud)
重新初始化git repo:
cd thecorrectfolder/
git init
Run Code Online (Sandbox Code Playgroud)
重新添加所有文件,提交和推送:
git add .
git commit -am 'fixing things'
git push origin master
Run Code Online (Sandbox Code Playgroud)
完成!给自己一杯啤酒吧.
当你在重新初始化之后提交git repo时,你会得到一堆看起来像这样的输出:
rename {ethanode/coffee => coffee}/app.coffee (100%)
Run Code Online (Sandbox Code Playgroud)
换句话说,所有来自父文件夹的引用都被重命名为使用正确的文件夹.
ndi*_*dim 35
git filter-branch让你以这种方式重写历史.该git filter-branch手册页甚至以您的案例为例:
要重写存储库,使其看起来像foodir /已成为其项目根目录,并丢弃所有其他历史记录:
Run Code Online (Sandbox Code Playgroud)git filter-branch --subdirectory-filter foodir -- --all
您可能希望git clone将repo放入git filter-branch运行之前(或之后)的新子目录中.(在filter-branch之前进行克隆并在新克隆上运行filter-branch将具有将原始.git/目录保留为备份的优点,以防出现问题.)
T.E*_*.D. 18
除非你已经创建了一些你想要保存的历史记录,否则最简单的事情就是删除.git子目录并在正确的目录中重做init.
如果您使用git来解决问题,那么任何解决方案都必然会留下很多"此处移动此文件"的历史条目,这些条目实际上并未发生变化,但您在创建时修复了一个错误.最好是正确创造它.
M. *_*loo 12
Git可以记住带有哈希值的文件,
只需移动.git到根目录并告诉git记住所有文件更改--all选项.
$ mv .git ../
$ cd ..
$ git add . --all
$ git status // => you can see all the files recognized as renamed 100%
$ git commit -m "Moves repo to root directory."
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67842 次 |
| 最近记录: |