1. ホーム
  2. git

[解決済み] git checkout <filename>」と「git checkout -- <filename>」の違いについて

2022-07-06 19:29:32

質問

http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file

投稿を発見しました。

とは何が違うのか、まだわかりません。

  1. git checkout <filename>

  2. git checkout -- <filename>

どのような場合に、前者と後者を使い分ければよいのでしょうか?

どのように解決するのですか?

特殊なオプションです。 -- は、このポイント以降のすべての引数を、それがどのように見えるかに関わらず、ファイル名として扱うことを意味します。 通常、引数がファイル名であることを明確にするために使用します。 オプション 例えば

rm -f      # does nothing
rm -- -f   # deletes a file named "-f"

git checkout 1 も取る。 -- を取り、後続の引数がオプションの "treeish"パラメータでどのコミットを望むかを指定するものではないことを意味します。

つまり、この文脈では 安全 を使用することで -- を常に使用する必要がありますが が必要です。 で始まる名前を持つファイルを元に戻したいときに必要です。 - で始まる名前を持っていたり、ブランチの名前と同じであったりする場合です。 ブランチ/ファイルの曖昧さ回避のためのいくつかの例。

git checkout README     # would normally discard uncommitted changes
                        # to the _file_ "README"

git checkout master     # would normally switch the working copy to
                        # the _branch_ "master"

git checkout -- master  # discard uncommitted changes to the _file_ "master"

とオプション/ファイルの曖昧さ解消を行います。

git checkout -p -- README  # interactively discard uncommitted changes
                           # to the file "README"

git checkout -- -p README  # unconditionally discard all uncommitted
                           # changes to the files "-p" and "README"

がある場合、どうするのかよくわかりません。 ブランチ で始まり、名前が - . おそらく、最初からそんなことはしないでください。


1 このモードでは、"checkout" は他にもいくつかのことを行うことができます。 私は、なぜ git が "checkout" サブコマンドのモードとして、他の多くの VCS のように "revert" や "reset" ではなく、 "discard uncommitted changes" を実装したのかを理解したことがありませんが、git 自身の観点からは、より理にかなっていると思われます。