如何从git仓库中删除源文件

444

基本问题:如何使一个git仓库与其克隆的源进行分离?

git branch -a 显示:

* master
  remotes/origin/HEAD -> origin/master

我希望删除所有关于起源和相关修改的知识。
更长的问题:我想从一个现有的Subversion仓库中创建多个较小的Git仓库。每个新的Git仓库应该只包含与其相关分支的完整历史记录。我可以使用以下命令将仓库修剪为所需的子树:
git filter-branch --subdirectory-filter path/to/subtree HEAD

但是生成的代码库仍然包含在 origin/master 分支下已废弃的子树的所有修订记录。
我意识到我可以使用 -T 标志来使用 git-svn 克隆子版本库的相关子树。我不确定这是否比以后在 git 代码库的副本上运行多个 git filter-branch --subdirectory-filter 实例更有效,但无论如何,我仍然想断开与原始版本库的链接。
4个回答

772
相当简单:
git remote rm origin
关于filter-branch的问题 - 只需在您的过滤分支命令中添加--prune-empty,它将删除在结果存储库中实际上不包含任何更改的任何修订版本。
git filter-branch --prune-empty --subdirectory-filter path/to/subtree HEAD

2
哦,出现了“错误:无法删除配置部分'remote.origin'”。 - Dima Lituiev

68

移除现有的源并将新的源添加到您的项目目录中

git remote show origin    
git remote rm origin    
git add .    
git commit -m "First commit"    
git remote add origin Copied_origin_url    
git remote show origin   
git push origin master

1
在我的情况下,即使我在远程和本地重命名了主分支,git branch -r 仍会在本地存储库中显示 origin/master。以下方法解决了这个问题:
E:\SourceCode\PascalCoinGit\PascalCoin>git remote prune origin
Pruning origin
URL: https://github.com/SkybuckFlying/PascalCoin
 * [pruned] origin/master

E:\SourceCode\PascalCoinGit\PascalCoin>

命令:

git remote show origin

(之前见过但完全忘记了)

结果:

E:\SourceCode\PascalCoinGit\PascalCoin>git remote show origin
* remote origin
  Fetch URL: https://github.com/SkybuckFlying/PascalCoin
  Push  URL: https://github.com/SkybuckFlying/PascalCoin
  HEAD branch: PascalCoinMaster
  Remote branches:
    GUIExperimentalBugFixes1       tracked
    GUIExperimentalBugFixes2       tracked
    GUIExperimentalBugFixes3       tracked
    GUIExperimentalBugFixes4       tracked
    GUIExperimentalBugFixes5       tracked
    MergeTest                      tracked
    PIP-0026Windows7Implementation tracked
    PascalCoinMaster               tracked
    SkybuckMaster                  tracked
    TestPascalCoinMaster           tracked
    refs/remotes/origin/master     stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    GUIExperimentalBugFixes1       merges with remote GUIExperimentalBugFixes1
    GUIExperimentalBugFixes2       merges with remote GUIExperimentalBugFixes2
    GUIExperimentalBugFixes4       merges with remote GUIExperimentalBugFixes4
    GUIExperimentalBugFixes5       merges with remote GUIExperimentalBugFixes5
    MergeTest                      merges with remote MergeTest
    PIP-0026Windows7Implementation merges with remote PIP-0026Windows7Implementation
    SkybuckMaster                  merges with remote SkybuckMaster
  Local refs configured for 'git push':
    GUIExperimentalBugFixes1       pushes to GUIExperimentalBugFixes1       (up to date)
    GUIExperimentalBugFixes2       pushes to GUIExperimentalBugFixes2       (up to date)
    GUIExperimentalBugFixes3       pushes to GUIExperimentalBugFixes3       (up to date)
    GUIExperimentalBugFixes4       pushes to GUIExperimentalBugFixes4       (up to date)
    GUIExperimentalBugFixes5       pushes to GUIExperimentalBugFixes5       (up to date)
    MergeTest                      pushes to MergeTest                      (up to date)
    PIP-0026Windows7Implementation pushes to PIP-0026Windows7Implementation (fast-forwardable)
    PascalCoinMaster               pushes to PascalCoinMaster               (up to date)
    SkybuckMaster                  pushes to SkybuckMaster                  (up to date)
    TestPascalCoinMaster           pushes to TestPascalCoinMaster           (up to date)

E:\SourceCode\PascalCoinGit\PascalCoin>

好的,现在git branch -r显示它已经不存在了!


-3

使用以下命令:> git show origin > git remote rm origin


4
欢迎来到Stack Overflow。这个问题已经超过10年了,已经有三个答案,其中一个被接受的答案已经获得了超过650个赞。现有的答案已经提到了git remote show origingit remote rm origin。请不要重复回答。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接