GitHubリポジトリに2つのディレクトリがあります。そのうちの1つを削除したいのですが。リポジトリ全体を削除して再作成せずに、どうすればそれを行うことができますか?
16 に答える
gitとlocalからディレクトリを削除します
両方のディレクトリで「master」をチェックアウトできます。
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
gitからディレクトリを削除しますが、ローカルではありません
コメントで述べたように、あなたが通常したいことは、このディレクトリをgitから削除することですが、ファイルシステム(ローカル)から完全に削除することはしません
その場合、以下を使用します。
git rm -r --cached myFolder
gitリポジトリからのみフォルダ/ディレクトリを削除し、ローカルからは削除しない場合は、3つの簡単なコマンドを試してください。
ディレクトリを削除する手順
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
次のコミットでそのフォルダを無視する手順
次のコミットからそのフォルダーを無視するには、ルートフォルダー(gitが初期化されるメインプロジェクトディレクトリ)に.gitignoreという名前のファイルを1つ作成 し、そのフォルダー名をその中に入れます。必要な数のファイル/フォルダを無視できます
.gitignoreファイルは次のようになります
/FolderName
何らかの理由でkarmakazeが言ったことが機能しない場合は、ファイルシステムブラウザ(Windowsファイルエクスプローラーなど)を使用して、または使用するディレクトリを削除してみてください。
git add -A
ディレクトリを削除した後、次のコマンドを発行し
git commit -m 'deleting directory'
ます
git push origin master
。
あなたはこれを試すことができます:
git rm -rf <directory_name>
ディレクトリを強制的に削除します。
(他の回答で説明されているように)ディレクトリ内のファイルを削除するとgit rm
、gitに関する限りディレクトリは存在しなくなります。空のディレクトリをコミットしたり、削除したりすることはできません。
これは、明示的にしなければならないSubversionとは異なりsvn rm emptyfolder/
、ちなみにman
gitのページがそれ自体を「ばかげたコンテンツトラッカー」と表現している理由です。
「gitリポジトリに空のディレクトリを追加するにはどうすればよいですか」に関する回答は、このテーマに関するFAQにリンクしています。
現在、gitインデックス(ステージング領域)の設計では、ファイルの一覧表示のみが許可されており、空のディレクトリを許可するように変更を加える能力のある人は、この状況を改善するのに十分な配慮をしていません。
ディレクトリは、その中にファイルを追加するときに自動的に追加されます。つまり、ディレクトリをリポジトリに追加する必要はなく、ディレクトリ自体が追跡されることもありません。
「」と言うと
git add <dir>
、そこにファイルが追加されます。チェックアウトにディレクトリが本当に必要な場合は、その中にファイルを作成する必要があります。.gitignoreはこの目的に適しています。空のままにするか、ディレクトリに表示される予定のファイルの名前を入力できます。
以前にフォルダをコミットしたことがあり、履歴からもディレクトリを削除したいと思います。
私は次のことをしました:
次の場所にフォルダを追加します.gitignore
:
echo Folder_Name/ >> .gitignore
すべてのコミットから削除します。
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
古いコミットから参照を削除します。
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
すべての古い参照が完全に削除されていることを確認します
rm -Rf .git/logs .git/refs/original
ガベージコレクションを実行する
git gc --prune=all --aggressive
オンラインリポジトリに変更をプッシュします。
git push
これで完了です。
ただし、次の方法ですべての変更をすべてのブランチにプッシュできます。ただし、このコマンドには注意してください。
git push origin --all --force
git push origin --tags --force
その後、フォルダはgitから削除されましたが、ローカルディスクからは削除されませんでした。
git Directoryに移動し、次のコマンドを入力します 。rm-rf<ディレクトリ名>
ディレクトリを削除した後、次の方法で変更をコミットします 。git commit -m "Your Commit Message"
次に、リモートGITディレクトリに変更をプッシュするだけです 。gitpushorigin<ブランチ名>
空のフォルダを削除するため
作成した空のディレクトリ(フォルダ)を削除したかったのですが、gitはそれを削除できません。調査の結果、Gitが空のディレクトリを追跡しないことがわかりました。作業ツリーに空のディレクトリがある場合は、次のコマンドで削除する必要があります。
rm -r folderName
Gitを関与させる必要はありません。
次のように、フォルダをローカルで削除してからプッシュできます。
git rm -r folder_name
git commit -m "your commit"
git push origin master
私は通常git add --all
、リモートリポジトリからファイル/フォルダを削除するために使用します
rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master
master
リポジトリの他のブランチに置き換えることができます。
Attlasian Source Tree(Windows)(https://www.atlassian.com/software/sourcetree/overview)を使用できます。ツリーからファイルを選択し、上部にある[削除]ボタンを押すだけです。ファイルはローカルリポジトリとローカルgitデータベースから削除されます。次に、コミットしてからプッシュします。
私の同僚の一人が、私が強力だと思うBFGレポクリーナーを提案しました。不要なデータを削除するだけでなく、関連するコミット情報からリポジトリをクリーンアップします。
最初のgitコマンドは、何かを削除する前に、あなたが誰であるかを知る必要があります
- git init
- git config user.name "someone"
- git config user.email "someone@someplace.com"
- git rm -r
- git commit -m "deleting dir"
- gitプッシュオリジンマスター
新しいディレクトリを追加するには:
mkdir <YOUR-DIRECTORY>
しかし、Gitはディレクトリではなくファイルを追跡するため、Gitはこの新しいディレクトリを認識しません。
git status
Gitは私たちが行った変更を認識しないため.keep
、この新しい変更によってGitが認識できるように隠しファイルを追加します。
touch /YOUR-directory/.keep
これで、git status
Gitを押すと、変更が認識されます。
また、ディレクトリを削除する場合は、このコマンドを使用する必要があります。
rm -r <YOUR-DIRECTORY>
また、を使用してチェックするgit status
と、ディレクトリが削除されていることがわかります。
2つの答えの組み合わせは私のために働いた
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
それでも警告が表示される場合は、ファイルを手動で削除してください
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
試行rm -r -f <folder name>
またはrm -r --force <folder name>
-フォルダを強制的に削除します