gitリポジトリからディレクトリを削除するにはどうすればよいですか?


1235

GitHubリポジトリに2つのディレクトリがあります。そのうちの1つを削除したいのですが。リポジトリ全体を削除して再作成せずにそれを行うにはどうすればよいですか?


1
ディレクトリにファイルはありますか?
Fred Foo

3
@Iarsmans:はい6ファイル。どちらのディレクトリも、一方が大文字、もう一方が小文字であることを除いて、同じです。
Sahat Yalkabov

回答:


2326

gitとローカルからディレクトリを削除する

両方のディレクトリで「マスター」をチェックアウトできます。

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

8
私もまったく同じ状況でした。私が試しgit rm -r myFolderたときはうまくいきましたが、「MyFolder」ディレクトリからすべてを削除しました。「MyFolder」ディレクトリのすべてを元に戻してからコミットする必要がありました。
ジャスティン

240
@Justin gitからのみ削除し、ファイルシステムをgit rm -r --cached myFolder
現状のまま

32
表示されるエラーメッセージは次のとおりです:致命的:pathspec 'directory'はどのファイルとも一致しませんでした。
user2441441

3
@ user2441441リポジトリにまったく追加されていないフォルダ/ファイルを削除しようとすると、このエラーが表示されました
lukeatdesignworks

3
git rm -r --cached directory/追跡されたgitからのみ削除されますが、リポジトリ構造は残ります。
ネストル

287

ローカルからではなく、gitリポジトリからのみフォルダー/ディレクトリを削除するには、3つの簡単なコマンドを試してください。


ディレクトリを削除する手順

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

次のコミットでそのフォルダーを無視する手順

次のコミットからそのフォルダーを無視するには、ルートに.gitignoreという名前のファイルを1つ作成し 、そのフォルダー名をその中に入れます。好きなだけ置くことができます

.gitignoreファイルは次のようになります

/FolderName

ディレクトリを削除


1
また、他のコンピューターでgit rm -r --cached FolderName git commit -m "リポジトリから削除されたフォルダー"を実行してから、プルして同期を維持する必要があります。
Simon

1
これで、リポジトリに追加された時点からディレクトリが削除されますか?または、単にディレクトリを削除して.gitリポジトリに再コミットするだけですか?
alpha_989 2018年

1
すごい!ワーキング!
BeingCoders 2018年

2
よく説明された、いい答え
Rakshit Shah

1
よくやった。私のマシンでは、3番目のステップが機能しません。しかし、$ git pushに変更された場合は機能します
Hong

82

何らかの理由でkarmakazeの発言がうまくいかない場合は、使用するディレクトリを削除するか、ファイルシステムブラウザ(Windowsファイルエクスプローラなど)で削除してみてください。ディレクトリを削除した後、コマンドを発行:
git add -A
し、その後
git commit -m 'deleting directory'
、その後
git push origin master


4
これでうまくいきました。-A引数について説明してもらえますか?
2018年

2
@Arun -Aは--allの短縮形であり、すべての追跡済みファイルと追跡されていないファイルから変更を追加します
Joachim Rohde

これでうまくいきました。
UVM 2019

20

あなたはこれを試すことができます: git rm -rf <directory_name>

ディレクトリを強制的に削除します。


3
これもローカルディレクトリから削除されます
abdul rehman kk

18

git rm他の回答で説明されているように)ディレクトリ内のファイルを削除すると、gitに関する限り、ディレクトリは存在しなくなります。空のディレクトリをコミットしたり、削除したりすることはできません。

これは、明示的にする必要があるsubversionとは異なりsvn rm emptyfolder/、ちなみにmangit のページがそれ自体を「愚かなコンテンツトラッカー」と表現しているのはこのためです。

上の答えは「どのように私はgitのリポジトリに空のディレクトリを追加する」へのリンクこのテーマに関するよくある質問

現在、gitインデックス(ステージング領域)の設計では、ファイルのリストのみを許可しており、空のディレクトリを許可するように変更を行うのに十分な能力を持つ人は、この状況を修正するのに十分注意していません。

ディレクトリは、その中にファイルを追加すると自動的に追加されます。つまり、ディレクトリをリポジトリに追加する必要はなく、単独で追跡されることもありません。

git add <dir>」と言うと、そこにファイルが追加されます。

チェックアウトに存在するディレクトリが本当に必要な場合は、その中にファイルを作成する必要があります。.gitignoreはこの目的に適しています。空のままにするか、ディレクトリに表示される予定のファイルの名前を入力できます。


8

以前にフォルダをコミットしたことがあり、履歴内のディレクトリも削除したい。

私は次のことをしました:

フォルダを追加.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から削除されましたが、ローカルディスクからは削除されませんでした。


7

空のフォルダ削除するため

作成した空のディレクトリ(フォルダー)を削除したかったのですが、Gitはそれを削除できません。調査の結果、Gitが空のディレクトリを追跡しないことがわかりました。作業ツリーに空のディレクトリがある場合は、単純にそれを削除する必要があります

rm -r folderName

Gitを使用する必要はありません。


1
ありがとう!それがまさに私が必要としたことです。
SpyrosKo

6

gitディレクトリに移動して、次のコマンドを入力します 。rm -rf < Directory Name >

ディレクトリを削除したら、次のようにして変更をコミットします 。git commit -m "Your Commit Message"

次に、変更をリモートGITディレクトリに単にプッシュします 。git push origin < Branch name >


4

次のように、フォルダーをローカルで削除してからプッシュできます。

git rm -r folder_name
git commit -m "your commit"
git push origin master

4

私は通常git add --all、リモートリポジトリからファイル/フォルダを削除するために使用します

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master リポジトリの他のブランチで置き換えることができます。


2

Attlasianソースツリー(Windows)(https://www.atlassian.com/software/sourcetree/overview)を使用できます。ツリーからファイルを選択し、上部にある[削除]ボタンを押すだけです。ファイルはローカルリポジトリとローカルgitデータベースから削除されます。次にコミットしてからプッシュします。


これも私がやっていることです。本当に簡単にできるようになりましたが、gitコマンドを学ぶのは良いことです。
ミカモントーヤ2018年

1

私の同僚の1人が、強力だと思うBFG Repo-Cleanerを提案しました。不要なデータを削除するだけでなく、関連するコミット情報からリポジトリをクリーンアップします。


1

新しいディレクトリを追加するには:

mkdir <YOUR-DIRECTORY>

しかし、Gitはディレクトリではなくファイルを追跡しているため、Gitはこの新しいディレクトリを認識しません。

git status

Gitは加えた変更を認識しません。そのため.keep、この新しい変更によってGitを認識させるために隠しファイルを追加します。

touch /YOUR-directory/.keep

これで、git statusGitを押すと、変更が認識されます。

また、ディレクトリを削除する場合は、このコマンドを使用する必要があります。

rm -r <YOUR-DIRECTORY>

また、を使用してチェックした場合git statusは、ディレクトリが削除されていることがわかります。


0

最初のgitコマンドは、何かを削除する前に、あなたが誰であるかを知る必要があります

  1. git init
  2. git config user.name "誰か"
  3. git config user.email "someone@someplace.com"
  4. git rm -r
  5. git commit -m "diringing dir"
  6. git push originマスター

0

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.