という名前のファイル"file1.txt"
をGitリポジトリに追加しました。その後、私は、それを犯したと呼ばれるディレクトリのカップルの追加dir1
とをdir2
、とGitのリポジトリにそれらを約束しました。
今現在のリポジトリがあり"file1.txt"
、dir1
とdir2
。どのように私は削除することができます"file1.txt"
ように、他の人に影響を与えずdir1
とdir2
?
という名前のファイル"file1.txt"
をGitリポジトリに追加しました。その後、私は、それを犯したと呼ばれるディレクトリのカップルの追加dir1
とをdir2
、とGitのリポジトリにそれらを約束しました。
今現在のリポジトリがあり"file1.txt"
、dir1
とdir2
。どのように私は削除することができます"file1.txt"
ように、他の人に影響を与えずdir1
とdir2
?
回答:
を使用しgit rm
ます。
Gitリポジトリとファイルシステムからファイルを削除する場合は、次のコマンドを使用します。
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
ファイルをリポジトリから削除しますが、ローカルファイルシステムからも削除します。
ファイルをリポジトリから削除し、ローカルファイルシステムから削除しない場合は、次のコマンドを使用します。
git rm --cached file.txt
以下の正確な状況は、gitを使用してビジネスのWebサイトのバージョン管理を維持しているところですが、「mickey」ディレクトリは、CAD開発者とプライベートコンテンツを共有するためのtmpフォルダでした。彼が巨大なファイルを必要としたとき、私はリンクされていないプライベートディレクトリを作成し、そこにファイルをftpdしてブラウザー経由でフェッチできるようにしました。これを忘れて、後でgit add -A
Webサイトのベースディレクトリからを実行しました。その後、git status
コミットが必要な新しいファイルを示しました。今、私はそれらをgitの追跡とバージョン管理から削除する必要がありました...
以下の出力例は、私に何が起こったのかを示してい.003
ます。ここでは、誤ってファイルを削除しました。ありがたいことに、へのローカルコピーに何が起こったかは気にしません.003
が、現在変更されている他のファイルのいくつかは、私がWebサイトに加えたばかりの更新であり、ローカルファイルシステムから削除されたのはすばらしいことです。"ローカルファイルシステム" =ライブWebサイト(優れたプラクティスではありませんが、現実です)。
[~/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]$
更新:この回答はトラフィックを増やしているので、他のGit回答がいくつかの優れたリソースを共有していることをお伝えしたいと思いました。このページには、Gitをわかりやすく説明するグラフィックがあります。「プロのGit」本はオンラインで、私に多くのことができます。
git commit -m "Just removing file1.txt"
次に、これを次のようにコミットする必要があります。リモートリポジトリがある場合は、のようなものでコミットをプッシュしますgit push origin master
。
まず、git rm
特に複数のファイルでを使用している場合は、ワイルドカードがgit
コマンドではなくシェルによって解決されることを考慮してください。
git rm -- *.anExtension
git commit -m "remove multiple files"
ただし、ファイルがすでにGitHubにある場合は、(2013年7月以降) Web GUIから直接削除できます。
リポジトリ内のファイルを表示し、上部のゴミ箱アイコンをクリックして、他のWebベースの編集と同じように削除をコミットするだけです。
次にgit pull
、ローカルリポジトリで" "を実行すると、ファイルもローカルで削除されます。
これは、この回答をgit repoからファイルを削除する(迂回的な)方法にしますか?
(GitHubの上のファイルがあることは言うまでもありませんである「gitのレポ」で)
(コミットはそのファイルの削除を反映します):
そしてちょうどそのように、それはなくなった。
これらの機能のヘルプについては、ファイルの作成、移動、名前変更、削除に関するヘルプ記事を必ずお読みください。
注:これはバージョン管理システムであるため、後でファイルを復元する必要がある場合は、Gitが常にサポートします。
最後の文は、削除されたファイルが履歴の一部であることを意味し、十分に簡単に復元できます(ただし、GitHub Webインターフェースではまだできません)。
「Gitリポジトリで削除されたファイルを復元する」を参照してください。
これは私のために働いた唯一のオプションです。
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
注:* .sqlをファイル名またはファイルタイプに置き換えます。これはすべてのコミットを通過し、このファイルタイプをリッピングするため、非常に注意してください。
編集:注意してください-このコマンドの後はプッシュまたはプルできません-「無関係の履歴」の拒否が表示されます 'git push --force -u origin master'を使用してプッシュまたはプルできます
git push --force -u origin master
より一般的に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
git help
混乱しますが、単純なものには適しています:)
rm
削除するのではなく、削除するためにファイルをステージングすることは、混乱しにくいと感じます(ただし、noobsにはまだ意味がありません)。
リポジトリからファイルを削除したいが、ファイルシステムに残したい場合(追跡されなくなります):
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
他の人がここで述べたように、それを行う正しい方法はを使用することです。ブランチの履歴のすべてのコミットを書き換えて、そのファイルを削除します。
しかし、それを行った後でも、reflog、リモート、タグなどでそれへの参照が存在する可能性があるため、gitはそれを記憶できます。
ワンステップで完全に消去したい場合は、 git forget-blob
簡単ですgit forget-blob file1.txt
。
これにより、すべての参照が削除され、実行されgit filter-branch
、最後にgitガベージコレクターgit gc
が実行されて、リポジトリ内のこのファイルが完全に削除されます。
注:gitからのみファイルを削除する場合は、以下を使用してください:
git rm --cached file1.txt
ハードディスクからも削除したい場合:
git rm file1.txt
フォルダーを削除する場合は(フォルダーにファイルがいくつか含まれている可能性があります)、次のように再帰コマンドを使用して削除する必要があります。
git rm -r foldername
別のフォルダ内のフォルダを削除したい場合
git rm -r parentFolder/childFolder
その後、することができますcommit
し、push
いつものように。ただし、削除されたフォルダを復元したい場合は、次のようにすることができます:gitから削除されたファイルを復元することは可能です。
ドキュメントから:
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…
オプション
<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 / file1とdir / file2を削除するためのdir)を指定して、ディレクトリ内のすべてのファイルと再帰的にすべてのサブディレクトリを削除できますが、これには-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.
リポジトリからファイルを削除した後、BFG Repo-Cleanerをgit rm
使用して、ファイルをリポジトリ履歴から完全かつ簡単に消去できます。
「変更されたファイル」リストを汚染したくないため、誤ってリポジトリに入れた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に移動し、Syncを実行してリモートに適用しました。
ドキュメントによると。
git rm --cached giant_file
機密データに関しては、ファイルを削除したと言うのではなく、最新の既知のコミットに含めるだけです。
0.最後のコミットを修正
git commit --amend -CHEAD
すべてのgit履歴からファイルを削除する場合は、ドキュメントに従って次の手順を実行する必要があります。
1.ローカル履歴から削除します
git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \ --prune-empty --tag-name-filter cat -- --all
# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"
3.リモートから削除する必要がある場合
git push origin --force --all
4.タグリリースからも削除する必要がある場合:
git push origin --force --tags
ローカルリポジトリではなくgit repoにファイリングする場合は、ウェブインターフェースからgit repoでファイルを開き、インターフェースの右隅にある[削除]ボタンを見つけます。 ここをクリックして、インターフェースの削除オプションを表示するには
git rm
正解ですが、ファイルは履歴に残ります。機密情報が含まれているためにファイルを削除したい場合は、もっと徹底的な何かをする必要があります。(特に、既にプッシュしたコンテンツの変更履歴は抜本的なアクションであり、可能であれば回避する必要があります。)