web-dev-qa-db-ja.com

git checkoutsとはどういう意味ですか?

Gitのcheckoutsとは何ですか?

特定のブランチをcheckoutすると、HEADはそのブランチを指します。しかし、それは本当に何を意味するのでしょうか?そのブランチで作業できるということですか?はいの場合、ブランチをチェックアウトせずに作業することはできませんか?

また、remote checkoutはどういう意味ですか?どのように役立ちますか?

83
daehaai

既に述べたように、HEADは、コミットツリーのどこにいるかを示すラベルです。あるコミットから別のコミットに移動すると、それも一緒に移動します。 git checkout <commit>は、コミットツリー内を移動し、フォーカス(HEAD)を指定されたコミットに移動するための基本的なメカニズムです。

コミットは、いくつかの方法、コミットハッシュ、ブランチ名、タグ名、相対構文(HEAD^HEAD~1など)のいずれかで指定できます。チェックアウトを変更ブランチと見なすことはしばしば有用であり、その観点から機能するオプションがいくつかありますが、それらはすべてコミットを参照します。

コミットをチェックアウトするには、HEADを移動する以外の何らかの副作用があります。

  • 作業ディレクトリは、チェックアウトされたコミットの状態に更新されます。
  • ブランチ名が指定されている場合、checkoutはそのブランチをアクティブにします。アクティブなブランチは、追加された新しいコミットとともに移動します。
    • -bオプションを使用すると、現在のコミットに基づいて新しいブランチが作成され、アクティブになります。
    • --trackオプションを使用すると、チェックアウトされたブランチにリモートブランチを認識させることができます。
    • --Orphanオプションを使用すると、新しいブランチが作成されます(-bの場合と同様)が、既存のコミットに基づいていません。

さらにいくつかのオプションがあります git checkout man-page で読むことができます。すべてのオプションは、あるコミットから別のコミットへの移動を中心にしています。 HEADに移動します。

48
David Culp

理解に役立つように、ファイル、フォルダー、ブランチを使用したチェックアウトの使用例をいくつか説明します。

devおよびindex.htmlという名前のフォルダーがあるとしましょう。また、すべてが追跡され、作業ディレクトリはクリーンです。

誤ってファイル名を変更した場合index.htmlを元に戻したい場合は、git checkout index.htmlを使用するだけで、現在選択されているリポジトリのリポジトリからそのファイルの状態を復元します。

devフォルダーに変更を加えて、それを回復したい場合。 git checkout devを使用できますが、そのフォルダーをチェックアウトする代わりにdevという名前のブランチが既にある場合は、そのブランチをプルダウンします。それを避けるために、git checkout -- devをしたいです。

ここで、裸の二重ダッシュは現在のブランチを表し、現在選択されているブランチからdevフォルダーをgitに要求します。

同様にgit checkout alpha devを実行すると、アルファブランチからdevフォルダーがプルダウンされます。

この回答は、最初の質問「git checkout really mean」に対するものです。

21
owaishanif786

「チェックアウトする」とは、リポジトリから任意のコミットを取得し、関連するファイルとディレクトリツリーの状態を作業ディレクトリに再作成することを意味します。

notブランチヘッド(たとえば、git checkout HEAD~2)であるコミットをチェックアウトすると、いわゆるdetached headになります。ここでコミットを作成できますが、別のブランチに切り替えると、それらのコミットはブランチ名によって回復できなくなり、しばらくするとガベージコレクタによって削除されることもあります。

18
Michael Wild