Gitでは、 `git show commit__id –name-only`を使用して、リモートリポジトリにプッシュしようとしているすべてのコミットされたファイルを一覧表示できます。

__P.S `git status`はコミットされたファイルを表示しませんでした。

1.ケーススタディ

以下の場合、gitが誤って不要な `target/** `ファイルを追加してあまりにも多くコミットした場合、ローカルでコミットされたファイルを削除する方法は? (リモートのgitサーバにプッシュしていない)

ターミナル

$ git commit -m "test uncommit"
[master f5f3fa6]test uncommit
 7 files changed, 3603 insertions(+)
 create mode 100644 src/main/java/com/mkyong/benchmark/BenchmarkMap.java
 create mode 100644 target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__forwardLoop__jmhTest.java
 create mode 100644 target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType.java
 create mode 100644 target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B1.java
 create mode 100644 target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B2.java
 create mode 100644 target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B3.java
 create mode 100644 target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__reverseLoop__jmhTest.java

2.解決策

2.1 `git log`はすべてのcommit

idを表示し、最初のものは最後のcommit

idです。

ターミナル

$ git log
commit f5f3fa6e012adf5d2caf2e1310421ad8258950d3 (HEAD -> master)
Author: mkyong <[email protected]>
Date:   Mon Nov 26 16:02:00 2018 +0800

    test uncommit

commit 3250f725962ba12b6695c083895dd4c3533545a2 (origin/master)
Author: mkyong <[email protected]>
Date:   Mon Nov 25 15:00:17 2018 +0800

    init

commit b28f3199e10d2aed5426342f6ed172ba7f710483
Author: mkyong <[email protected]>
Date:   Fri Nov 23 17:27:25 2018 +0800

    update readme

2.2 `git show commit

id –name-only`は、指定されたcommit

idでコミットされたすべてのファイルを表示します。

ターミナル

$ git show f5f3fa6e012adf5d2caf2e1310421ad8258950d3 --name-only

commit f5f3fa6e012adf5d2caf2e1310421ad8258950d3 (HEAD -> master)
Author: mkyong <[email protected]>
Date:   Mon Nov 26 16:02:00 2018 +0800

    test uncommit

src/main/java/com/mkyong/benchmark/BenchmarkMap.java
target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__forwardLoop__jmhTest.java
target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType.java
target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B1.java
target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B2.java
target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B3.java
target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__reverseLoop__jmhTest.java

2.3最後のコミットを `git reset –soft HEAD〜1`で元に戻し、間違ってコミットされたファイルをステージング領域に戻します。

ターミナル

$ git reset --soft HEAD~1

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   src/main/java/com/mkyong/benchmark/BenchmarkMap.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__forwardLoop__jmhTest.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B1.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B2.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__jmhType__B3.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkForwardReverseLoop__reverseLoop__jmhTest.java
        new file:   target/generated-sources/annotations/com/mkyong/benchmark/generated/BenchmarkLoop__jmhType.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .idea/....

=== 参考文献

.  https://git-scm.com/docs/git-log[gitログのドキュメント]

.  https://git-scm.com/docs/git-show[git show documentation]

link://tag/git/[git]link://タグ/git-commit/[git commit]link://tag/git-log/[git log]link://tag/git-show/[git show]