2312

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

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

4

24 に答える 24

3849

を使用し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
于 2010-01-12T07:52:32.037 に答える
636

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

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

以下の正確な状況は、gitを使用してビジネスのWebサイトのバージョン管理を維持しているが、「mickey」ディレクトリはCAD開発者とプライベートコンテンツを共有するためのtmpフォルダーでした。彼が巨大なファイルを必要としたとき、私はリンクされていないプライベートディレクトリを作成し、ブラウザ経由でフェッチできるようにファイルをftpで転送しました。これをしたことを忘れて、後でgit add -AWebサイトのベースディレクトリからを実行しました。続いて、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をわかりやすく説明するのに役立つグラフィックがあります。「ProGit」の本はオンラインで、私を大いに助けてくれます。

于 2013-05-25T20:26:18.927 に答える
100

まず、特に複数のファイルにを使用している場合はgit rm、ワイルドカードがコマンドではなくシェルによって解決されることを考慮してgitください。

git rm -- *.anExtension
git commit -m "remove multiple files"

ただし、ファイルがすでにGitHubにある場合は、(2013年7月以降) WebGUIから直接ファイルを削除できます。

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

次にgit pull、ローカルリポジトリで「」を実行すると、ファイルもローカルで削除されます。
この答えをgitリポジトリからファイルを削除する(回りくどい)方法にするのはどれですか?
(GitHub上のファイルが「gitリポジトリ」にあることは言うまでもありませ


削除ボタン

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

削除をコミットする

そして、ちょうどそのように、それはなくなっています。

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

注:これはバージョン管理システムであるため、後でファイルを回復する必要がある場合は、Gitが常に責任を負います。

最後の文は、削除されたファイルがまだ履歴の一部であり、簡単に復元できることを意味します(ただし、GitHub Webインターフェイスからはまだ復元できません)。

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

于 2013-07-04T20:53:07.930 に答える
79

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

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

注:*。sqlをファイル名またはファイルタイプに置き換えてください。これはすべてのコミットを通過し、このファイルタイプを削除するため、非常に注意してください。

編集:注意してください-このコマンドの後、プッシュまたはプルすることはできません-'無関係な履歴'の拒否が表示されます'git push --force -uoriginmaster'を使用してプッシュまたはプルできます

于 2015-02-27T19:29:16.057 に答える
39

さらに、削除するフォルダーであり、後続の子フォルダーまたはファイルである場合は、次を使用します。

git rm -r foldername
于 2015-04-17T15:41:42.657 に答える
24

より一般的に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
于 2010-01-12T08:21:03.960 に答える
16

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

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"
    
于 2015-03-20T12:13:15.093 に答える
14

git rm今後はこのブランチのファイルのみを削除しますが、履歴に残り、gitはそれを記憶します。

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

しかし、それを行った後でも、reflog、リモート、タグなどに参照がある可能性があるため、gitはそれを記憶できます。

ワンステップで完全に消し去りたい場合は、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されて、リポジトリ内のこのファイルが完全に削除されます。

于 2017-01-23T12:56:04.483 に答える
11
于 2018-10-07T02:57:14.077 に答える
10

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

rm file1.txt

git commit -a -m "Deleting files"

git push origin master
于 2015-10-06T03:07:44.597 に答える
8

According to the documentation.

git rm --cached file1.txt

When it comes to sensitive data—better not say that you removed the file but rather just include it in the last known commit:

0. Amend last commit

git commit --amend -CHEAD

If you want to delete the file from all git history, according to the documentation you should do the following:

1. Remove it from your local history

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
  1. Don't forget to include this file in .gitignore (If it's a file you never want to share (such as passwords...):
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"

3. If you need to remove from the remote

git push origin --force --all

4. If you also need to remove it from tag releases:

git push origin --force --tags
于 2020-05-16T21:08:18.913 に答える
8

The answer by Greg Hewgill, that was edited by Johannchopin helped me, as I did not care about removing the file from the history completely. In my case, it was a directory, so the only change I did was using:

git rm -r --cached myDirectoryName

instead of "git rm --cached file1.txt" ..followed by:

git commit -m "deleted myDirectoryName from git"
git push origin branch_name

Thanks Greg Hewgill and Johannchopin!

于 2020-10-03T09:14:45.660 に答える
7

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

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

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

于 2016-08-23T12:03:21.613 に答える
7

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

gitrmファイル名

追跡されていないすべてのファイルをディレクトリから1回のショットで再帰的にクリーンアップするには

git clean -fdx

于 2016-08-23T13:56:08.923 に答える
5

GitHub for Windowsアプリケーションを使用している場合は、次の5つの簡単な手順でファイルを削除できます。

  • [同期]をクリックします。
  • ファイルが置かれているディレクトリをクリックして、ファイルの最新バージョンを選択します。
  • ツールをクリックして、[ここでシェルを開く]を選択します。
  • シェルで「rm{filename}」と入力し、Enterキーを押します。
  • 変更をコミットして再同期します。
于 2013-03-14T15:15:21.120 に答える
3
  1. まず、ローカルリポジトリからファイルを削除します。

    gitrm-rファイル名

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

    git rm --cachedFile-Name

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

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

    git push 
    
于 2016-10-18T04:00:50.167 に答える
3

go to your project dir and type:

git filter-branch --tree-filter 'rm -f <deleted-file>' HEAD

after that push --force for delete file from all commits.

git push origin --force --all
于 2020-09-30T00:52:58.730 に答える
2

For the case where git rm doesn't suffice and the file needs to be removed from history: As the git filter-branch manual page now itself suggests using git-filter-repo, and I had to do this today, here's an example using that tool. It uses the example repo https://example/eguser/eg.git

  1. Clone the repository into a new directory git clone https://example/eguser/eg.git

  2. Keep everything except the unwanted file. git-filter-repo --path file1.txt --invert-paths

  3. Add the remote repository origin back : git remote add origin https://example/eguser/eg.git. The git-filter-repo tool removes remote remote info by design and suggests a new remote repo (see point 4). This makes sense for big shared repos but might be overkill for getting rid a single newly added file as in this example.

  4. When happy with the contents of local, replace remote with it.

    git push --force -u origin master. Forcing is required due to the changed history.

Also note the useful --dry-run option and a good discussion in the linked manual on team and project dynamics before charging in and changing repository history.

于 2020-09-07T01:14:24.143 に答える
1

提案されたオプションをたくさん試しましたが、どれも機能していないようでした(さまざまな問題をリストしません)。私がやったことは、うまくいきましたが、(私にとっては)シンプルで直感的でした:

  1. ローカルリポジトリ全体を別の場所に移動する
  2. リポジトリをマスターからローカルドライブに再度クローンします
  3. #1の元のコピーから#2の新しいクローンにファイル/フォルダをコピーして戻します
  4. 問題のある大きなファイルが存在しないか、.gitignoreファイルで除外されていることを確認してください
  5. 通常のgitadd/ git commit /gitpushを実行します
于 2018-03-21T18:22:23.473 に答える
1

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

于 2018-09-30T17:26:37.510 に答える
1

Just by going on the file in your github repository you can see the delete icon beside Raw|Blame and don't forget to click on commit changes button. And you can see that your file has been deleted.

于 2020-09-03T18:45:58.620 に答える
0

'変更されたファイル'リストを汚染したくない誤ってリポジトリに入れられた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 = remove
    • -r=再帰的に削除します
    • -f =は力を意味します、あなたが本当にそれを意味するので
    • objはフォルダです
  4. 今すぐ実行git commit -m "remove obj folder"

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

次に、CMD行を検索する必要がなかったため、Visual Sstudioにアクセスし、同期を実行してリモートに適用しました。

于 2018-07-27T01:59:15.110 に答える
-1

If you need to remove files from a determined extension (for example, compiled files) you could do the following to remove them all at once:

git remove -f *.pyc
于 2019-10-01T05:21:42.593 に答える
-7

ローカルリポジトリではなくgitリポジトリにファイルする場合は、Webインターフェイスを介してgitリポジトリでファイルを開き、インターフェイスの右隅にある[削除]ボタンを見つけます。 ここをクリックして、インターフェースの削除オプションを表示します

于 2016-11-30T15:47:09.240 に答える