Git repoに"file1.txt"
という名前のファイルを追加しました。その後、それをコミットし、dir1
とdir2
という名前のディレクトリをいくつか追加し、それらをgit repoにコミットしました。
現在のリポジトリには"file1.txt"
、dir1
、dir2
があります。"file1.txt"
やdir1
のような他の人に影響を与えずにdir2
を削除するにはどうすればよいですか?
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
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"の本はオンライン で、とても役に立ちます。
あなたのファイルがすでにGitHub上にある場合、 あなたは(2013年7月)あなたは Web GUIから直接それを削除することができます!
リポジトリ内のファイルを表示し、上部のゴミ箱アイコンをクリックして、他のWebベースの編集と同じように削除を確定するだけです。
(コミットはそのファイルの削除を反映します):
そしてそのように、それは消えました。
これらの機能については、 作成 、 移動 、 名前変更 、および 削除 ファイルに関するヘルプ記事を必ずお読みください。
注:これはバージョン管理システムなので、後でファイルを回復する必要がある場合にはGitが常にあなたの立場を取り戻します。
最後の文は、削除されたファイルがまだ履歴の一部であることを意味します、そしてあなたはそれを十分に簡単に復元することができます(しかしまだGitHubウェブインターフェースを通してではない)
「 削除されたファイルをGitリポジトリに復元する 」を参照してください。
これは私のために働いた唯一のオプションです。
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
注:* .sqlを自分のファイル名またはファイルタイプに置き換えます。これはすべてのコミットを経てこのファイルタイプを取り去るので、とても注意してください。
編集:注意を払ってください - このコマンドの後はプッシュやプルができなくなります - '無関係な履歴'の拒否が表示されます。引く
さらに、それが削除されるフォルダであり、それがその後の子フォルダまたはファイルである場合は、
git rm -r foldername
より一般的には、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
レポジトリからファイルを削除したいが、ファイルシステムに残しておく場合(追跡されません):
bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"
レポジトリとファイルシステムからファイルを削除したい場合は、2つの方法があります。
ファイルのインデックスにステージングされた変更がない場合
bykov@gitserver:~/temp> git rm file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt"
ファイルの変更がインデックスに記録されている場合
bykov@gitserver:~/temp> git rm -f file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt"
git rm
はこれからこのブランチのファイルを削除するだけですが、それは歴史の中に残り、gitはそれを記憶します。
他の人がここで述べているように、それを行う正しい方法はgit filter-branch
です。それはそのファイルを削除するためにブランチの歴史の中ですべてのコミットを書き換えます。
しかし、それを行った後でも、gitはそれをreflog、remotes、tagsなどで参照する可能性があるのでそれを思い出すことができます。
あなたが一歩でそれを完全に消したいのなら、git forget-blob
を使うことをお勧めします。
簡単です、git forget-blob file1.txt
を実行するだけです。
これによりすべての参照が削除され、git filter-branch
が実行され、最後にgitガベージコレクタgit gc
が実行され、リポジトリ内のこのファイルが完全に削除されます。
Rmコマンドを使用してローカルフォルダからファイルを削除してから、変更をリモートサーバにプッシュする場合のもう1つの方法。
rm file1.txt
git commit -a -m "Deleting files"
git Push Origin master
特定のファイルを削除する
git rm filename
ディレクトリから追跡されていないすべてのファイルをワンショットで再帰的に消去する
git clean -fdx
GitHub for Windowsアプリケーションをお持ちの場合は、5つの簡単なステップでファイルを削除できます。
私の場合、私は数回のコミット後にgithub上のファイルを削除しようとしましたが、コンピュータに保存して
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git Push --force -u Origin master
そして後でこのファイルは無視されました
注:gitからのみファイルを削除したい場合は、以下を使用してください。
git rm --cached file1.txt
ハードディスクからも削除したい場合:
git rm file1.txt
フォルダを削除したい場合(フォルダに含まれるファイルが少ない場合もあります)、以下のようにrecursiveコマンドを使用して削除する必要があります。
git rm -r foldername
別のフォルダ内のフォルダを削除したい場合
git rm -r parentFolder/childFolder
それから、いつものようにcommit
とPush
を使えます。あなたが削除されたフォルダを回復したい場合しかし、あなたはこれに従うことができます: 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.
まず、ローカルリポジトリからファイルを削除します。
git rm -rファイル名
または、ローカルリポジトリからのみファイルシステムからファイルを削除する
git rm --cachedファイル名
次に、ローカルリポジトリに変更をコミットします。
git commit -m "unwanted files or some inline comments"
最後に、ローカルの変更をリモートリポジトリに更新/プッシュします。
git Push
私はたくさんの提案されたオプションを試しましたが、どれもうまくいきませんでした(私は様々な問題をリストアップしません)。 私がやったこと、うまくいったことは(私にとって)単純で直感的でした。
git rm
を使用してファイルをリポジトリから削除した後は、 BFG Repo-Cleaner を使用して、リポジトリ履歴からファイルを完全に簡単に削除できます。
私は自分の '変更されたファイル'リストを汚染したくないと誤ってレポにしてしまったobjとbinファイルがあります
の後 私は彼らがリモートに行ったのに気づいた、私はこれを.gitignore
に追加することによってそれらを無視した
/*/obj
/*/bin
問題は、それらがすでにリモートにいて、変更されると、変更されたものとしてポップアップし、変更されたファイルリストを汚染することです。
表示されないようにするには、リモートリポジトリからフォルダ全体を削除する必要があります。
コマンドプロンプトで:
C:\repos\MyRepo
)C:\repos\MyRepo\SSIS
) git rm -r -f obj
を入力します。git commit -m "remove obj folder"
を実行してください13個のファイルが315222個の削除を変更しました という警告メッセージが表示されました - /
それから私はCMDの行を調べる必要はありませんでしたので、私はVisual Sstudioに入り、リモートに適用するために同期を行いました。