我用git clone --depth=1. 我做了一些改变……显然不了解浅克隆的复杂性……现在想把新项目推到一个新的远程。
在我的主要开发机器上:
git clone --depth=1 file://old_project new_project
cd new_project
# made a handful of commits here....
Run Code Online (Sandbox Code Playgroud)
我现在想将项目推送到另一台机器上。在那个远程机器上我做了:
git init --bare new_project.git
Run Code Online (Sandbox Code Playgroud)
然后回到我的机器上:
git remote remove origin
git remote add origin ssh://<remote host>/path/to/repos/new_project.git
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试push该项目时,我得到:
fatal: protocol error: expected old/new/ref, got 'shallow 7f6a256...'
fatal: The remote end hung up unexpectedly
Counting objects: 49299, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (44533/44533), done.
error: pack-objects died of signal 13
error: failed to push some refs to '<my new remote>'
Run Code Online (Sandbox Code Playgroud)
我想要做的是让新的 repo 包含从初始浅克隆开始的历史记录,但仍然保留在那之后所做的更改。换句话说,我不想“unshallow”分支并拉出所有以前的历史记录。
有没有办法不.git从项目中删除目录并重新开始?
我的机器正在运行 git 1.9.1。遥控器正在运行 1.7.11.7。我可能可以在没有不良影响的情况下更新我的一面,但不能更新遥控器,因为它承载了我不想冒险破坏的其他几个项目。
我会这样做:
创建一个新的根分支:
git checkout --orphan truncated_master
Run Code Online (Sandbox Code Playgroud)使用浅层存储库中最早的可用提交填充其初始提交:
START_COMMIT=$(git rev-list master|tail -n 1)
git checkout $START_COMMIT -- .
git commit -m "Initial commit"
Run Code Online (Sandbox Code Playgroud)将所有提交从 master 复制到新分支:
git cherry-pick $START_COMMIT..master
Run Code Online (Sandbox Code Playgroud)将新分支推送到新的远程:
git push origin truncated_master:master
Run Code Online (Sandbox Code Playgroud)