web-dev-qa-db-ja.com

Gitリポジトリからファイルを削除するにはどうすればいいですか?

Git repoに"file1.txt"という名前のファイルを追加しました。その後、それをコミットし、dir1dir2という名前のディレクトリをいくつか追加し、それらをgit repoにコミットしました。

現在のリポジトリには"file1.txt"dir1dir2があります。
"file1.txt"dir1のような他の人に影響を与えずにdir2を削除するにはどうすればよいですか?

1621
webminal.org

git rm :を使用してください。

git rm file1.txt
git commit -m "remove file1.txt"

しかし、Gitリポジトリからのみファイルを削除し、ファイルシステムからは削除したくない場合は、次のようにします。 

git rm --cached file1.txt
git commit -m "remove file1.txt"

そしてリモートリポジトリへの変更をプッシュする

git Push Origin branch_name  
2587
Greg Hewgill

git rm file.txtはレポジトリからファイルを削除しますが、 はローカルファイルシステムからも削除します

ファイルをリポジトリから削除し、ローカルファイルシステムから削除するには、 not を使用します。
git rm --cached file.txt 

以下の正確な状況は、私が自分のビジネスのWebサイトのバージョン管理を維持するためにgitを使用しているところですが、 "mickey"ディレクトリはCAD開発者とプライベートコンテンツを共有するtmpフォルダでした。彼が巨大なファイルを必要としたとき、私は私的な、リンクされていないディレクトリを作り、彼がブラウザを通してフェッチするためにそこにファイルをftpdしました。これを忘れて、後でウェブサイトのベースディレクトリからgit add -Aを実行しました。その後、git statusはコミットが必要な新しいファイルを示しました。今私はgitの追跡とバージョン管理からそれらを削除する必要がありました...

以下の出力例は、私が偶然に.003ファイルを削除したところです。ありがたいことに、私は.003へのローカルコピーに何が起こったのか気にしませんが、他に現在変更されているファイルのいくつかは私がちょうどウェブサイトに作った更新でありローカルファイルシステムから削除されたのは壮大でしょう! "ローカルファイルシステム" =ライブウェブサイト(実際にはよくないが現実です)

[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
#   modified:   shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.002
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
[~/www]$

更新: この回答はトラフィックが多いため、 other Git answer には2つの素晴らしいリソースがあります。 このページ には、Gitを分かりやすく説明するグラフィックがあります。私のために。 "Pro Git"の本はオンライン で、とても役に立ちます。

567
Chris K

あなたのファイルがすでにGitHub上にある場合、 あなたは(2013年7月)あなたは Web GUIから直接それを削除することができます!

リポジトリ内のファイルを表示し、上部のゴミ箱アイコンをクリックして、他のWebベースの編集と同じように削除を確定するだけです。

delete button

(コミットはそのファイルの削除を反映します):

commit a deletion

そしてそのように、それは消えました。

これらの機能については、 作成移動名前変更 、および 削除 ファイルに関するヘルプ記事を必ずお読みください。

注:これはバージョン管理システムなので、後でファイルを回復する必要がある場合にはGitが常にあなたの立場を取り戻します。 

最後の文は、削除されたファイルがまだ履歴の一部であることを意味します、そしてあなたはそれを十分に簡単に復元することができます(しかしまだGitHubウェブインターフェースを通してではない) 

削除されたファイルをGitリポジトリに復元する 」を参照してください。

63
VonC

これは私のために働いた唯一のオプションです。

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

注:* .sqlを自分のファイル名またはファイルタイプに置き換えます。これはすべてのコミットを経てこのファイルタイプを取り去るので、とても注意してください。 

編集:注意を払ってください - このコマンドの後はプッシュやプルができなくなります - '無関係な履歴'の拒否が表示されます。引く

47
Jason Glisson

さらに、それが削除されるフォルダであり、それがその後の子フォルダまたはファイルである場合は、

git rm -r foldername
32
Raja

より一般的には、git helpは少なくとも次のような簡単な質問に役立ちます。

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index
23
James Polley

レポジトリからファイルを削除したいが、ファイルシステムに残しておく場合(追跡されません):

bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"

レポジトリとファイルシステムからファイルを削除したい場合は、2つの方法があります。

  1. ファイルのインデックスにステージングされた変更がない場合 

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. ファイルの変更がインデックスに記録されている場合 

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
15
Aleksey Bykov

git rmはこれからこのブランチのファイルを削除するだけですが、それは歴史の中に残り、gitはそれを記憶します。

他の人がここで述べているように、それを行う正しい方法はgit filter-branchです。それはそのファイルを削除するためにブランチの歴史の中ですべてのコミットを書き換えます。

しかし、それを行った後でも、gitはそれをreflog、remotes、tagsなどで参照する可能性があるのでそれを思い出すことができます。

あなたが一歩でそれを完全に消したいのなら、git forget-blobを使うことをお勧めします。

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/ /

簡単です、git forget-blob file1.txtを実行するだけです。

これによりすべての参照が削除され、git filter-branchが実行され、最後にgitガベージコレクタgit gcが実行され、リポジトリ内のこのファイルが完全に削除されます。

12
nachoparker

Rmコマンドを使用してローカルフォルダからファイルを削除してから、変更をリモートサーバにプッシュする場合のもう1つの方法。

rm file1.txt

git commit -a -m "Deleting files"

git Push Origin master
9
Suhaib

特定のファイルを削除する

git rm filename

ディレクトリから追跡されていないすべてのファイルをワンショットで再帰的に消去する

git clean -fdx

7
Sitesh

GitHub for Windowsアプリケーションをお持ちの場合は、5つの簡単なステップでファイルを削除できます。

  • 同期をクリックします。
  • ファイルがあるディレクトリをクリックして、ファイルの最新バージョンを選択します。
  • ツールをクリックして、「ここでシェルを開く」を選択します。
  • シェルで、「rm {filename}」と入力してEnterキーを押します。
  • 変更をコミットして再同期します。
5
jushusted

私の場合、私は数回のコミット後にgithub上のファイルを削除しようとしましたが、コンピュータに保存して

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git Push --force -u Origin master

そして後でこのファイルは無視されました

5
OlegV

注:gitからのみファイルを削除したい場合は、以下を使用してください。

git rm --cached file1.txt

ハードディスクからも削除したい場合:

git rm file1.txt

フォルダを削除したい場合(フォルダに含まれるファイルが少ない場合もあります)、以下のようにrecursiveコマンドを使用して削除する必要があります。

git rm -r foldername

別のフォルダ内のフォルダを削除したい場合

git rm -r parentFolder/childFolder

それから、いつものようにcommitPushを使えます。あなたが削除されたフォルダを回復したい場合しかし、あなたはこれに従うことができます: gitから削除されたファイルを回復することは可能です。

ドキュメントから:

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

_ options _

<file>…​

Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you

それらをシェルエスケープする必要があるかもしれません。先頭のディレクトリ名(例:dir to remove dir/file1およびdir/file2)を指定すると、ディレクトリ内のすべてのファイル、および再帰的にすべてのサブディレクトリを削除できますが、これには[。]が必要です。明示的に指定される-rオプション-f--force

Override the up-to-date check.

-n--dry-run

Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.

-r

Allow recursive removal when a leading directory name is given.

-- 

This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for

コマンドラインオプション)--cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

--ignore-unmatch

Exit with a zero status even if no files matched.

-q--quiet

git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.

公式文書でもっと読む。

3
Blasanka
  1. まず、ローカルリポジトリからファイルを削除します。

    git rm -rファイル名

    または、ローカルリポジトリからのみファイルシステムからファイルを削除する

    git rm --cachedファイル名

  2. 次に、ローカルリポジトリに変更をコミットします。

    git commit -m "unwanted files or some inline comments"   
    
  3. 最後に、ローカルの変更をリモートリポジトリに更新/プッシュします。

    git Push 
    
3
Ajay

私はたくさんの提案されたオプションを試しましたが、どれもうまくいきませんでした(私は様々な問題をリストアップしません)。 私がやったこと、うまくいったことは(私にとって)単純で直感的でした。

  1. ローカルレポ全体を他の場所に移動する
  2. マスターからあなたのローカルドライブにリポジトリを再度クローンします。
  3. #1の元のコピーから#2の新しいクローンにファイル/フォルダをコピーします。
  4. 問題の大きいファイルが、.gitignoreファイルに存在しないか除外されていることを確認してください。
  5. 通常のgit add/git commit/git Pushを実行します。
2
jacanterbury

git rmを使用してファイルをリポジトリから削除した後は、 BFG Repo-Cleaner を使用して、リポジトリ履歴からファイルを完全に簡単に削除できます。

0
glisu

私は自分の '変更されたファイル'リストを汚染したくないと誤ってレポにしてしまったobjとbinファイルがあります

の後 私は彼らがリモートに行ったのに気づいた、私はこれを.gitignoreに追加することによってそれらを無視した

/*/obj
/*/bin

問題は、それらがすでにリモートにいて、変更されると、変更されたものとしてポップアップし、変更されたファイルリストを汚染することです。 

表示されないようにするには、リモートリポジトリからフォルダ全体を削除する必要があります。

コマンドプロンプトで:

  1. リポジトリフォルダへのCD(C:\repos\MyRepo
  2. SSIS\objを削除したいそれはあなたがトップレベルでのみ削除することができるようである、それであなたは今SSISにCDを入れる必要がある:(すなわちC:\repos\MyRepo\SSIS) 
  3. 今すぐ魔法の呪文git rm -r -f obj を入力します。
    • rm =削除
    • -r =再帰的に削除する
    • -f =力を意味します、あなたは本当にそれを意味します
    • objはフォルダです
  4. git commit -m "remove obj folder"を実行してください

13個のファイルが315222個の削除を変更しました という警告メッセージが表示されました - /

それから私はCMDの行を調べる必要はありませんでしたので、私はVisual Sstudioに入り、リモートに適用するために同期を行いました。

0
Nick.McDermaid