739

チェンジセットにたくさんのファイルがありますが、変更された1つのファイルを特に無視したいと思います。後は次のようになりgit statusます:

# modified:   main/dontcheckmein.txt
# deleted:    main/plzcheckmein.c
# deleted:    main/plzcheckmein2.c
...

git add触れたくない1つのテキストファイルを無視する方法はありますか?何かのようなもの:

git add -u -except main/dontcheckmein.txt
4

18 に答える 18

1034
git add -u
git reset -- main/dontcheckmein.txt
于 2010-12-17T23:00:00.177 に答える
212

pathspecmagicとその短縮形でgitサポートexclude certain paths and filesされるようになりました。したがって、次のコマンドとして簡単に実行できます。:(exclude):!

git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt

実際には、さらに指定できます。

git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*

MacおよびLinuxの場合、各ファイル/フォルダーのパスを引用符で囲みます

git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
于 2018-08-19T03:21:26.400 に答える
180

1)すでにバージョン管理されている単一のファイルへの変更を無視し始める

git update-index --assume-unchanged "main/dontcheckmein.txt"

そしてそれを元に戻すgit update-index --no-assume-unchanged "main/dontcheckmein.txt"

ファイルを無視するgithubドキュメント

2)特定の単一ファイルを完全に無視して、リポジトリで作成されないようにする

まず、このスタックオーバーフローの投稿を見てください:Gitグローバル無視が機能しない

.gitignore、先頭に。を付けずにファイルへの相対パスを追加します./

したがって、ファイルがにある場合MyProject/MyFolder/myfile.txt(フォルダ内.gitにもあります)、 atファイルMyProjectに追加します。MyFolder/myfile.txt.gitignore

無視に関連付けられているルールを確認するには、git check-ignore "MyFolder/myfile.txt"

グローバル無視について

そのリンクはについて話~/.gitignore_globalしますが、ファイルはあなたのプロジェクトに関連しています。したがって、除外パターンをに入れると、MyFolder/myfile.txt機能します~/.gitignore_globalが、あまり意味がありません...

一方、git config core.excludesfile .gitignorewhere .gitignoreis inを使用してプロジェクトを設定するMyProjectと、ローカルファイルがオーバーライドさ~/.gitignore_globalれます。これには非常に便利なルールがあります...

したがって、今のところ、で混合するスクリプト.gitignoreを作成するのが最善だと思います。~/.gitignore_global.gitignore

最後の警告
無視したいファイルがすでにリポジトリにある場合、これを行わないとこの方法は機能しません:git rm "MyFolder/myfile.txt"。ただし、ローカルでも削除されるため、最初にバックアップしてください。後でコピーして戻すことができます...

于 2014-05-03T00:35:40.117 に答える
103

ファイルの場合

git add -u
git reset -- main/dontcheckmein.txt

フォルダの場合

git add -u
git reset -- main/*
于 2014-10-14T11:24:27.027 に答える
22

ベンジャクソンは正しいですが、私はそのソリューションをどのように使用してきたかも追加すると思いました。以下は、私が(gitaddと呼んでいる)非常に単純なスクリプトで、.gittrackignore(。gitignoreの動作と非常によく似た)というファイルにリストされているいくつかの変更を除いて、すべての変更を追加します。

#!/bin/bash
set -e

git add -A
git reset `cat .gittrackignore`

そして、これは私の現在.gittrackignoreのように見えます。

project.properties

デプロイ時にコマンドラインからコンパイルするAndroidプロジェクトに取り組んでいます。このプロジェクトはSherlockActionBarに依存しているため、project.propertiesで参照する必要がありますが、コンパイルが面倒なので、gitaddproject.propertiesを毎回追加解除することなく、すべての変更をgitに入力して追加するだけです。

于 2013-03-14T01:10:39.043 に答える
17

変更をファイルに保持するがコミットしないために、これを行いました

git add .

git reset -- main/dontcheckmein.txt

git commit -m "commit message"

ファイルが除外されていることを確認するには

git status

于 2019-07-17T20:27:50.367 に答える
10
git add .
git reset main/dontcheckmein.txt
于 2020-02-11T12:50:49.810 に答える
6

git add -A変更および新しく追加されたすべてのファイルを一度に追加するために使用します。

git add -A
git reset -- main/dontcheckmein.txt
于 2018-05-28T19:05:30.447 に答える
5

すべてのファイルを追加し、gitresetで削除する必要のあるファイルを除外できます。

git add .
git reset -- <file_name_to_exclude>
于 2020-12-19T23:06:55.713 に答える
3
于 2018-03-06T12:47:39.357 に答える
2

これを試して:

git checkout -- main/dontcheckmein.txt
于 2016-08-08T16:13:24.540 に答える
2

Gitは:(exclude)、除外するパスのpathspecsプレフィックスを提供します。

その短い魔法の署名は:^です。
ドキュメント:https ://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-exclude

git add . :^main/dontcheckmein.txt

このスレッドへのいくつかの回答は:!、これも機能しますが、引用符でのみ言及します。一般的に、!シェル拡張の恐ろしいキャラクターと見なされます。


あなたが私のようである場合—コマンド-p内のフラグを使用してコミットされる内容を常に確認してください—魔法の署名も魅力のように機能します。git add:^

git add -p . :^main/dontcheckmein.txt
于 2021-12-27T11:43:11.833 に答える
0

私はgit add --patchかなりの量を使用dしており、同じファイルを常にヒットする必要がないように、このようなものが必要でした。私は仕事を成し遂げるために非常にハッキーないくつかのgitエイリアスを作り上げました:

[alias]
    HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
    ap                      = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"

私の場合、特定の縮小ファイルを常に無視したかったのですが$GIT_EXCLUDE_PATTERN、より一般的なユースケースのように環境変数を使用するようにすることができます。

于 2016-03-11T06:01:57.037 に答える
0

コミットする変更:(「gitresetHEAD...」を使用してステージングを解除します)

于 2018-11-13T17:56:49.650 に答える
0

1つのコマンドでそれを達成しないので、直接あなたが尋ねたことではありませんが、結果はあなたが望むものになるはずです。

経由ですべてのファイルをステージング領域に追加した後

git add -u

入力git statusすると、次のように提案されます

git restore --staged main/dontcheckmein.txt
于 2021-03-10T13:42:22.923 に答える
0

毎回特定のファイルを無視したい場合は、を含まない3つの効果的なソリューションがあります.gitignore

  1. 無視するファイルをに追加します.git/info/exclude構成がマシンに固有.gitignoreであることを除いて、と同じように機能します。

  2. pre-commitgitフックを使用してファイルをリセットします。例えば:

    $ echo 'git reset -- src/main/resources/log4j.properties' >> .git/hooks/pre-commit
    $ chmod +x .git/hooks/pre-commit
    

    pre-commitフックは、コミットの直前に実行されます。したがって、各コミットの前にファイルを自動的にリセットできます。

    $ git status
    On branch CHANGE-137-notifications-support ...
    
    Changes not staged for commit:
     modified:   Dockerfile
     modified:   src/main/resources/log4j.properties
    
    $ git add .
    
    $ git status
    On branch CHANGE-137-notifications-support ...
    
    Changes to be committed:
     modified:   Dockerfile
     modified:   src/main/resources/log4j.properties
    
    
    $ git commit -m "Trivial change"
    
    Unstaged changes after reset:
    M    src/main/resources/log4j.properties
    
    [CHANGE-137-notifications-support 97cfb3f] Trivial change
    1 file changed, 3 insertions(+)
    
  3. 3番目の方法は、特定のファイルのインデックスを更新することです。

    $ git update-index --assume-unchanged src/main/resources/log4j.properties
    
于 2021-12-23T06:51:54.873 に答える
0

すべてのファイルを追加

gitadd。

以下に貼り付けるファイルパスを取得します

gitステータス

コミットから削除

git reset --file / to / path / file-to-ignore.txt

于 2022-02-09T11:07:47.443 に答える
-2

あなたはこれを試すことができます:git add * && git reset main/dontcheckmein.txt

于 2020-05-29T13:50:06.723 に答える