我在github上已经有一个现有的代码库,现在想把同样的文件推送到一个新的代码库中。我在终端中运行git init命令,并显示"Reinitialized existing Git repository in..."。
那么我该如何将文件推送到我的新代码库中?
git remote remove origin
git remote add origin [new_repo_path].git
将所有文件添加并提交更改
git init .
git add -A
git commit -am "Initial commit"
现在将文件推送。
git push
您在评论中声称:
我删除了旧存储库
但实际上您并没有删除:
正如您从此消息中可以看到的那样,Git正在“重新初始化”现有存储库。这基本上什么也没做。1 请记住,存储库不是“一堆文件”,而是提交的集合。更准确地说,存储库在其核心处包含两个数据库:Reinitialized existing Git repository in ...
这意味着要删除存储库,您必须删除.git
目录本身。无论存在多少该存储库的其他副本——请记住,每个git clone
都复制了所有提交,我们通常称之为“存储库的副本”3——这个特定的存储库都在.git
目录中。
1它的主要功能是将新的挂钩模板目录复制到指定位置。如果您没有调整现有的挂钩,并且正在使用与以前相同的标准挂钩模板,则实际上不会发生任何事情。如果您正在使用不同的模板目录,则此类“重新初始化”可能很有用。我从未听说过有人真正这样做,但肯定有某些人会将其作为例行程序执行。
2在子模块中,存储库通常移动到其他位置,而不是一个.git
目录,您会找到一个.git
文件。不作为子模块的存储库也可以使用此机制,使用git worktree add
创建的工作树使用此机制从添加的工作树中引用存储库。
3尽管git clone
不会复制任何分支名称,但克隆通常和完全复制一样好,因为副本的所有者现在可以为他们克隆中拥有的每个远程跟踪名称创建一个分支名称。那些远程跟踪名称是复制您克隆的分支名称的结果。一旦他们创建这样的名称,他们就拥有了与您相同的所有分支。
如果他们愿意,他们可以将每个远程跟踪名称复制到两个分支名称,这样他们就拥有了比您多一倍的分支。这就是Git中关于分支的问题:它们实际上并不重要。这不是关于分支名称的问题。在Git中,它们不是有价值的货币。它们只是书签,有点像。在Git中重要的是提交,而克隆已经拥有了所有提交。虽然有一些例外情况,特别是浅层和/或单分支克隆,但总的来说,克隆会复制所有提交,而不会复制任何分支,这就完成了一次完整的复制,因为分支名称根本不重要。
作为一种快捷方式,可以使用git clone --mirror
使克隆复制整个名称数据库。但是,如果您计划将其用作真正的镜像以外的其他用途,则需要进行一些小的克隆后调整。
是否要删除存储库取决于是否要保留历史记录。在Git中,历史记录是存储库中的提交集。我们通过从某个名称(分支名称、标签名称、远程跟踪名称或其他名称)开始,并让Git向后工作,如存储在提交中的历史记录一样,来查找这些提交。我们使用git checkout
或(在2.23及更高版本中)git switch
从提交中获取文件。(还有其他工具,如git archive
,可以从提交中获取文件。检出和切换只是主要工具。)
要保留历史记录,请保留提交-即存储库。要开始新的历史记录,即只有一个新提交,请丢弃存储库-从工作树中删除.git
目录-并使用git init
创建一个新的存储库,然后添加您的文件并运行git commit
。请注意,如果删除存储库,则会删除所有提交,因此历史记录现在已经丢失。(当然,原始存储库的任何其他克隆,在其他地方存储,仍将保留。)
如果您在运行 git init 命令之前从未运行过任何 git 命令,并且出现了此错误。您可以尝试删除项目文件夹中的 .git 文件。只需配置以显示隐藏文件夹即可。这对我有帮助。
git remote add
命令将URL添加到新的存储库中,并将其推送。 - flaxelgit remote -v
并将其输出附加到问题中吗? - Ajay Lingayat