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


93

checkoutgitのs とは何ですか?

checkout特定のブランチにHEADアクセスすると、そのブランチへのポイントがわかります。しかし、それはどういう意味ですか?その後、そのブランチで作業できるということですか?はいの場合、ブランチをチェックアウトしないと、ブランチで作業できませんか?

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


1
何も取られていません。はい、あります。それが何を意味するかの理論に出くわします。つまり、HEADなどを指しますが、「チェックアウトコード-変更-チェックイン」の観点から知りたいですか、それとも異なりますか?
daehaai 2013年

24
@antonijn-私は質問をグーグルで試しました-これは最初の結果です-ここに着くと、質問が閉じられ、誰もが持っているこのクレイジーな態度を目にしたのはちょっと悲しいです-私はTFSのバックグラウンド出身で、私は「チェックアウト」がGITで完全に異なる何かを意味すると疑い始めています。git-landでそれが何を意味するのか知りたい。
BrainSlugs83 2014

回答:


57

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

、ハッシュ、支店名、タグ名、相対的な構文(コミット多くの方法のいずれかによって特定することができるコミットHEAD^HEAD~1ように、等)とを。多くの場合、チェックアウトがブランチを変更していると見なすと便利です。その観点から機能するオプションがいくつかありますが、それらはすべてコミットを参照します。

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

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

いくつかのオプションがあります。これらはgit checkout man-pageで読むことができます。これらのオプションはすべて、あるコミットから別のコミットへの移動を中心に展開されHEADます。移動に加えて、その移動の影響が異なるだけです。


そのため、「チェックアウト」は完全に異なる何かを意味しているように思えます(とにかくTFSと比較すると、TFSの同等の機能は特定の「チェンジセット」を「取得」することになります)。これを調べてよかった!-「最新」のマジック定数はありますか?(TFSでは "T"です)-"HEAD"ラベルを知らなくても、最新バージョンのコードをダウンロードできますか?
BrainSlugs83 14

1
ブランチを使用している場合、ブランチ名はそのブランチの最新のコミットです。ブランチを使用していない場合は、最新のコミットを使用しています。logコマンドを使用して、ブランチに関係なくリポジトリで最新のコミットを見つけてから手動で移動しますが、必要に応じて自動化できると確信しています。
デビッドカルプ

最後の段落について:git checkout <commit> <path>ブランチを切り替えないことに注意してください。
ガラス

あなたの説明は間違っていませんが、非常に重要な(そして潜在的に危険な)ユースケースを忘れました:git checkout <path>
Eric Duminil

24

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

名前の付いたフォルダが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チェックアウトは本当に意味がある」に対するものです。


2
最後の行にこの答えは、最初の質問「git checkoutは本当に意味するもの」に対するものです。 「mean」ブランチから「really」フォルダをチェックアウトしていますか:P
Paramvir Singh Karwal

22

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.