44

git次のコマンドの違い:

git  checkout branch
git  checkout branch .
git  checkout  .  #<-- used at the branch

さまざまなブランチを最初のフォルダーとは別のフォルダーにチェックアウトすると、いくつかのファイルが欠落したのはなぜですか。
しかし、2 番目のコマンドを使用しているときは、すべて問題ありませんか?

4

2 に答える 2

63

git checkout(1)パス指定子が指定されているかどうかに関係なく、非常に異なることを行います。

  1. ブランチ指定子のみ( ) を使用git checkout branchすると、現在の作業ディレクトリを指定されたブランチに切り替え、可能であればローカルの変更を保持し、それ以外の場合は失敗します。すでにオンbranchになっている場合は、何もしません。HEADとと の間で異なる作業ディレクトリ内のファイルのみを変更しbranch、それらのいずれかにローカルの変更 (インデックスが作成されているかどうかに関係なく) がある場合は失敗します。
  2. パス指定子を使用すると、一致するすべてのファイル (すべてのファイルが一致する.) が指定された内容で 上書きされます。
    1. パス指定子のみ( ) を使用git checkout .すると、インデックスからコンテンツが書き込まれます。つまり、ステージングされていないローカル変更を元に戻します。段階的な変更を元に戻すにはgit reset、パス指定子とともに使用します。
    2. ブランチ指定子とパス指定子( ) の両方を使用git checkout branch .して、指定されたリビジョンにコンテンツを書き込みます。whereポイントは変更されないため、が と異なる場合は、後でステージングされていない変更が行われます。HEADbranchHEAD

man ページでは、-b/--branch オプションと -p/--patch オプションを使用する追加のケースが区別されていますが、それらはほとんど上記のケースの簡単な拡張です。

于 2013-01-22T14:30:45.680 に答える
16

上記の説明は問題ありませんが、例を挙げて説明しましょう。

git checkoutファイルフォルダーとブランチで使用できます。

index.htmlファイルとdevフォルダがあるとしましょう。

誤って変更index.htmlして元に戻したい場合は、単に実行しgit checkout index.htmlます。ファイルを元の形式に戻します。

ここで、dev フォルダー内でいくつかの変更を行い、それらの変更を dev フォルダー内に戻したいとしましょう。使用するgit checkout dev場合、ブランチがある場合は、という名前のフォルダーではなく、devその開発ブランチdevをチェックアウトします。

だからむしろ私は走るだろう git checkout -- dev

現在、この裸の二重ダッシュは現在のブランチを表しています。したがって、上記のコマンドは git から要求されているため、現在のブランチから「dev」という名前のフォルダーを指定してください。

ユースケースについて話しましょう。

git checkout branchこのコマンドは、単に「branch」という名前のブランチをチェックアウトします

git checkout branch ..2 番目のコマンドは、'branch' という名前のブランチからチェックアウトするか、現在のフォルダー名を指定するように git に指示します。

git checkout . #<-- used at the branchあなたが最初に言っているように、「branch」という名前のブランチに切り替えてからgit checkout branch、単に実行しているだけです。名前付きのgit checkout .ブランチがない.ため、現在のブランチから現在のフォルダー名を単にプルダウンします。

于 2017-08-13T12:07:22.500 に答える