在浅克隆之后推送到github

sno*_*gel 18 git github heroku shallow-clone

由于大量的提交,我有一个庞大的git repo,所以根据这里的建议我创建了一个浅层克隆.我已经对这个新的本地仓库进行了更改,现在我想在Github上推动我的起源(然后再到我在Heroku上的升级和生产遥控器).也许有一天我会学习阅读文档:

git clone --depth命令选项说

--depth创建一个浅层克隆,其历史记录被截断为指定的修订数.浅存储库有许多限制(您不能克隆或获取它,也不能从中推送或插入它)

那么......我如何从这种情况中解脱出来并将我的代码推送到Github?

Ant*_*sse 14

我不同意接受的答案有两个原因:

  1. 失败并忘记文件的原因有很多
  2. 您丢失了提交消息和历史记录

以下是我的建议:

嫁接点

你应该有一个带有嫁接点的$ GIT_DIR/.git/shallow文件.如果历史很简单,即使文档另有说明,这个移植点应该允许你推动.

补丁

这允许您保持提交历史记录等:

git format-patch origin..master
Run Code Online (Sandbox Code Playgroud)

然后克隆原点并重新应用:

git clone origin_path
cp shallow_clone/*.patch deep_clone
cd deep_clone
git am *.patch
Run Code Online (Sandbox Code Playgroud)

这次你可以推!

git push
Run Code Online (Sandbox Code Playgroud)

  • 虽然将我的答案粘贴到你的答案中,但这是非常蹩脚的 (2认同)

sj2*_*j26 12

Git(从1.8.3开始)现在有一种官方方式来获取浅层克隆的完整历史记录:

git fetch --unshallow
Run Code Online (Sandbox Code Playgroud)

git fetch文档:

--unshallow

如果源存储库已完成,请将浅存储库转换为完整存储库,从而消除浅存储库所施加的所有限制.

如果源存储库很浅,则尽可能多地获取,以便当前存储库与源存储库具有相同的历史记录.


Gre*_*gor 8

如果您在浅层克隆中工作并且缺少历史记录会导致问题,则可以使用该--depth选项获取更多历史记录.

git fetch --depth=20
Run Code Online (Sandbox Code Playgroud)

其中20是要提取的提交量.如果这还不够,请增加它.

您也可以使用该--depth选项git pull.


Eli*_*Eli 5

选项 1)如果您仍然拥有原始存储库,只需在推送之前从中获取:

git fetch --unshallow
Run Code Online (Sandbox Code Playgroud)

选项 2) 当心!这只建议用于新的存储库,因为这导致历史记录丢失,并且很容易发生冲突!

如果您已经删除了从中获取数据的存储库,则需要丢弃所有历史记录。

 git filter-branch -- --all
 git push
Run Code Online (Sandbox Code Playgroud)

git filter-branch:让你重写 Git 修订历史记录

--:将过滤器分支选项与修订选项分开

--all:重写所有分支和标签

  • 请编辑您的答案并解释为什么这是该问题的答案。仅代码答案不是很有帮助。 (3认同)

Cle*_*usW 2

来自@nschum

供将来参考:git 现在支持浅克隆推送(自 1.9 版起)。当推送到比您的历史记录更旧的过时分叉时,它仍然会失败。

(旁白:不幸的是,复制/粘贴是推荐的将评论提升为答案的方法)