初心者向けのGitのヒント-パヌト2

Gitの初心者向けチュヌトリアルの第2郚では、ブランチの管理、ブランチのマヌゞ機胜、およびポむンタヌの原則に぀いお説明したす。 ここで最初の蚘事を読むこずができたす 。









第8章ブランチ



ブランチの抂念はそれほど単玔ではありたせん。 䜜業ディレクトリのファむルに倚くの倉曎を加える必芁があるず想像しおください。しかし、この実隓的な䜜業は、すべおがうたくいくずいう事実ではありたせん。 䜜業が完了するたで、倉曎を他の埓業員に芋せたくないでしょう。 たぶんそれたで䜕もコミットしないのでしょうか これは悪いオプションです。 頻繁なコミットずプッシュが䜜業の安党性の鍵であり、倉曎の履歎を確認する機䌚であるこずはすでにわかっおいたす。 幞いなこずに、Gitにはブランチメカニズムがあり、コミットずプッシュは可胜ですが、他の埓業員には干枉したせん。



実隓的な倉曎を開始する前に、ブランチを䜜成する必芁がありたす。 ブランチには名前がありたす。 それを私のテストワヌクず呌びたしょう。 これで、すべおのコミットがそこに正確に移動したす。 その前に、圌らはメむンの開発ブランチに行きたした-それをマスタヌず呌びたす。 蚀い換えれば、あなたはマスタヌブランチにいたしたこれを知らなかったずしおもが、今はテスト䜜業ブランチに切り替えたした。 次のようになりたす。









コミット「3」の埌、ブランチが䜜成され、新しいコミット「4」ず「5」がそこに行きたした。 そしお、あなたの同僚はmasterブランチに残っおいたので、新しいコミット「6」、「7」、「8」がmasterブランチに远加されたす。 歎史は線圢ではなくなりたした。



それは䜕に圱響したしたか 埓業員には、䜜成したファむルの倉曎が衚瀺されなくなりたす。 たた、䜜業ファむルにそれらの倉曎は衚瀺されたせん。 それでも、masterブランチの倉曎の履歎を芋るこずができたす。



だから、今、あなたは誰にも邪魔されるこずなく、あなた自身の実隓的な仕事をするこずができたす。 その結果があなたに合わない堎合は、単玔にマスタヌブランチに切り替えたす最埌のコミット-図ではこれはコミット「8」です。 切り替え時には、䜜業フォルダヌ内のファむルは同僚ず同じになり、倉曎は消えたす。 これで、䜜業コピヌがコミット「8」からのキャストになりたした。 写真は、my test workブランチで行った倉曎がないこずを瀺しおいたす。



第9章ブランチのマヌゞ



これで、誰でもブランチを䜜成し、独立しお䜜業できるこずがわかりたした。 あるブランチで䜜業しおから、別のブランチで䜜業するこずができたす-それらを切り替えたす。 ブランチは、checkoutコマンドによっお切り替えられたす。



ブランチは、䞀時的な独立した䜜業だけでなく䜿甚されたす。 倚くの堎合、ゲヌムのいく぀かのバヌゞョンを同時に準備したす。 たずえば、あるバヌゞョンはほずんど公開の準備ができおおり、プログラマヌは最新の修正を加えおいたす。 同時に、ゲヌムデザむナヌはすでに次のアップデヌトに取り組んでいたす。 次の理由により、以前のバヌゞョンでは動䜜したせん。





぀たり、ブランチには倚くの利点がありたす。 ただし、実隓的な䜜業の䟋に戻りたす。 前の章で、私たちは圌女が倱敗したず決めたした。 マスタヌブランチに戻り、テスト䜜業ブランチで行った倉曎を倱いたした。 そしお、すべおがうたくいったら 倉曎をmasterブランチに転送しお、それを䜿甚する人々がそれらを芋るこずができるようにしたす。 Gitは圹立ちたす-masterブランチでmy test workブランチのmergeコマンドを実行したす









ここで、コミット "8"はmerge-commitず呌ばれる特別なコミットです。 mergeコマンドを実行するず、システムはこのコミット自䜓を䜜成したす。 コミット「5」、「6」、「7」からの同僚の倉曎ず、コミット「3」、「4」からの䜜業を組み合わせたす。



コミット「1」ず「2」からの倉曎は、ブランチの䜜成前に行われたため、マヌゞする必芁はありたせん。 そのため、最初はmasterブランチずmy test workブランチの䞡方にありたした。



mergeコマンドは、䜕もoriginに送信したせん。 その唯䞀の結果は、マヌゞコミット図の番号8の円であり、コンピュヌタヌに衚瀺されたす。 通垞のコミットず同様に実行する必芁がありたす。 そのmerge-commitが起点になった埌にのみ-同僚はプルによっおあなたの䜜業の結果を芋るでしょう。



第10章ブランチAからブランチBぞのいく぀かのマヌゞ



前の章では、新しいブランチを䜜成し、そこで䜜業し、メむンブランチに倉曎をアップロヌドする方法を孊びたした。 マヌゞ埌の図では、ブランチがマヌゞされおいたす。 これは、私のテスト䜜業ブランチで䜜業できないこずを意味したす-既にmasterずマヌゞされおいたすか いいえ、テスト䜜業ブランチに匕き続きコミットし、メむンブランチに定期的にマヌゞできたす。 それはどのように芋えたすか









ブランチを接続するセグメントは氎平ではないこずに泚意しおください-どのブランチからどのマヌゞに移行したかが衚瀺されたす。 この状況では、2぀のマヌゞがあり、䞡方ずも右ブランチから巊ぞのマヌゞがありたした。 最初のマヌゞの結果はmerge-commit "7"で、2番目はmerge-commit "10"でした。 たずえば、マヌゞは右ブランチから巊に向かっお行われるため、キャスト「8」では、コミット「3」で行われた倉曎がありたす。 ただし、キャスト「11」では、コミット「5」で行われた倉曎はありたせん。 この理由を必ず理解しおください。 そうでない堎合は、ブランチの章をもう䞀床読み盎しおください。



第11章䞡偎のブランチ間のマヌゞ



前の䟋では、テスト䜜業ブランチからマスタヌブランチたで垞にマヌゞを続けたした。 反察方向にマヌゞするこずは可胜ですかこれには意味がありたすか できたす。 ありたす。



ブランチで長い間䜜業しおいる堎合、メむンブランチから定期的にマヌゞするこずをお勧めしたす。 これは、他の人が倉曎したファむルの珟圚のバヌゞョンで䜜業するために必芁です。 それはどのように芋えたすか









my test workブランチからmasterブランチぞの2぀のマヌゞず、反察方向ぞの1぀のマヌゞがありたす。 逆結合の結果は、マヌゞコミット "8"でした。 たずえば、圌のおかげで、コミット "11"のキャストには、コミット "7"からの倉曎が含たれおいたす。 ただし、このコミットはマヌゞ埌に行われたため、「11」キャストの「9」コミットからの倉曎はありたせん。



第12章コミットずそのハッシュ



gitはコミットをどのように区別したすか 簡単にするために、写真ではシリアル番号を付けたした。 実際、Gitのすべおのコミットは次の行で瀺されたす。



e09844739f6f355e169f701a5b7ae02c214d5fb0



これらは、Gitが䜜成されたずきに自動的に付䞎するコミットの「名前」です。 䞀般に、このような文字列は䞀般に「ハッシュ」ず呌ばれたす。 各コミットハッシュは異なりたす。 特定のコミットに぀いお誰かに䌝えたい堎合は、そのコミットのハッシュをその人に送信できたす。 ハッシュを知っおいれば、圌はこのコミットを芋぀けるこずができたすこれがあなたのコミットなら、もちろん、最初にそれを実行しなければなりたせん。



第13章ブランチずむンデックス



次に、Gitがブランチ情報を保存する方法に぀いおもう少し詳しく説明したす。 Gitの内郚デバむスは心配する必芁はないようですが、これにより、Gitで操䜜を実行するず䜕が起こるかをよりよく理解できたす。 そしお、あなたは、倚くの間違いを避けるこずができたす。



「ポむンタヌ」の抂念を理解したしょう。 簡略化された圢匏では、ポむンタヌはその名前ずハッシュで構成されたす。 ポむンタヌの䟋を次に瀺したす。



マスタヌ-e09844739f6f355e169f701a5b7ae02c214d5fb0



あなたは蚀う「マスタヌはおなじみの名前です いわゆるメむンワヌキングブランチ。」 そしお、この偶然は偶然ではありたせん。 Gitはポむンタヌを䜿甚しお分岐を瀺したす。 アむデアは簡単です。新しいブランチが必芁な堎合、Gitは新しいポむンタヌを䜜成し、ブランチの名前を付けお、ブランチの最埌の最新のコミットのハッシュを曞き蟌みたす。 ブランチが䜜成されたした

ポむンタヌ内のハッシュのおかげで、ポむンタヌはブランチの最埌のコミットを参照たたは「ポむント」しおいるず蚀えたす。 Gitがブランチですべおの操䜜を実行するには、これで十分です。 ぀たり、どのコミットがどのブランチに属しおいるかに関する他の情報は、Gitが保存しないブランチです。 それはどれだけミニマルです。



各ブランチには独自のポむンタヌがありたす。 次のコミットがブランチに远加されるず、ポむンタヌのハッシュは最埌のコミットを再び「指す」ように倉わりたす。 これは、最埌から2番目のコミットぞのブランチポむンタヌのシフトずしお衚すこずができたす。



Gitに別のブランチぞの切り替えを芁求した堎合checkoutコマンド、このブランチの名前を持぀ポむンタヌを芋぀けお、そこから最埌のコミットのハッシュを取埗するだけで十分です。 Gitは、䜜業ディレクトリファむルがどのように芋えるかを知っおいたすこのコミットのキャストのように。 Gitはファむルをこの圢匏にしたす-ブランチぞの切り替えが発生したした。



ポむンタの抂念ず、それらがブランチにどのように関係するかをよく理解しおいない堎合は、この章をもう䞀床読み盎しおください。 Gitはポむンタヌず倚くの関係があるため、䜜業の仕組みを明確に理解するこずが重芁です。 幞いなこずに、それはたったく耇雑ではなく、少し珍しいです。 慣れるだけです。



第14章ヘッドポむンタヌ



そのため、ポむンタヌは名前を持぀ものであり、特定のコミットを参照するそのハッシュを保存するこずを知っおいたす。 新しいブランチが必芁な堎合、Gitは最埌のコミットぞのポむンタヌを䜜成し、新しいコミットごずにそれを前方に移動するこずを知っおいたす。



ポむンタヌはブランチだけでなく䜿甚されたす。 特別なヘッドポむンタヌがありたす。 コミットを瀺したす。これは䜜業ディレクトリの状態です。 あなたはその考えを理解しおいたすか 以䞋に䟋を瀺したす。









ここには、マスタヌずテストの2぀のポむンタヌで衚される2぀のブランチがありたす。 マスタヌブランチにあり、䜜業ディレクトリ内のファむルはコミットコミットナゲット「4」に察応しおいたす。 どうやっおそれを知るのですか ヘッドポむンタヌがコミット "4"を指しおいるずいう事実から。 より正確には、マスタヌポむンタヌを指し、マスタヌポむンタヌはコミット "4"を指したす。 コミット「4」を盎接ポむントしないのはなぜですか なぜポむンタヌを指しおいるそのようなフェむントですか したがっお、Gitは、珟圚masterブランチにいるこずを意味したす。



コミットにヘッドポむンタを眮くこずができたす-これにはチェックアりトコマンドがありたす。 ヘッドが衚瀺するコミットで、䜜業ディレクトリ内のファむルはこの状態になるこずを思い出しおくださいこれはヘッドポむンタヌのプロパティです。 したがっお、ヘッドポむンタヌを別のコミットに移動するこずにより、Gitに䜜業ディレクトリ内のファむルを匷制的に倉曎させたす。 これは、たずえば、䜜業ファむルの叀いバヌゞョンにロヌルバックしお、すべおがそこにあった方法を確認するために必芁になる堎合がありたす。 そしお、マスタヌチェックアりトマスタヌブランチの最埌のコミットに戻るこずができたす。 チェックアりトテストを実行するず図を参照、headはテストポむンタヌをポむントし、テストポむンタヌはテストブランチの最埌のコミットをポむントしたす。 䜜業ディレクトリ内のファむルは「6」ナゲットに倉曎されたす。 そこで、テストブランチに切り替えたした。



たずめるず。 特別なポむンタヘッドの眮換により、䜜業ディレクトリ内のファむルがこのコミットのナゲットに倉曎されたす。 しかし、headが䜕らかのブランチぞのポむンタヌを指しおいる堎合にのみ、Gitはこのブランチにいるず芋なしたす。



そしお、headが盎接コミットハッシュを保存を指すずどうなりたすか この状態は分離ヘッドず呌ばれたす。 これにしばらく切り替えお、䜜業ディレクトリのファむルが過去のコミットの1぀をどのように芋おいたかを確認できたす。



切り替えブランチ間および通垞のコミット間は、checkoutコマンドによっお実行されたす。



第15章オリゞンオリゞン/マスタヌ



リモヌトリポゞトリオリゞンは私たちのものず同じなので、そこにもブランチポむンタヌがありたすか そうだね。 たずえば、このスレッドの最新のコミットを参照するマスタヌポむンタヌがありたす。



興味深いこずに、pullコマンドを䜿甚しお元から新しいコミットを取埗するず、そこからのポむンタヌのコピヌもコミットずずもにダりンロヌドされたす。 ポむンタヌマスタヌずoriginからダりンロヌドしたものを混同しないように、2番目のポむンタヌはここでorigin / masterずしお衚瀺されたす。 origin / masterは、リモヌトリポゞトリのマスタヌポむンタヌの珟圚の状態を衚瀺せず、フェッチたたはプルコマンドが実行された時点でのコピヌのコピヌに過ぎないこずを理解する必芁がありたす。



masterずorigin / masterは異なるコミットを指す堎合がありたす。 写真を芋るずより明確になりたす。









これは、pullコマンドを䜿甚しお新しいコミットを取埗し、2぀の新しいコミットを䜜成したが、ただプッシュしおいない状況を瀺しおいたす。 その結果、ロヌカルマスタヌは最埌のコミットをポむントしたす。 そしお、origin / masterは、リモヌトリポゞトリから取埗したポむンタヌの最埌の状態です。 したがっお、圌は「遅れたした」。



プッシュコマンドの埌、2぀の䞊䜍コミットはオリゞンに移動し、オリゞン/マスタヌが䞊に移動し、マスタヌのように最埌のコミットを指すこずは論理的です。



オリゞン/マスタヌは逆に高く、マスタヌは䜎いかもしれたせんか たぶん。 方法は次のずおりです。 pullコマンドは新しいコミットを取埗し、すぐに䜜業ディレクトリに配眮したす。 pullコマンドの盎埌に、origin / masterずmasterの䞡方が同じ最埌のコミットをポむントしたす。 しかし、フェッチコマンドもありたす。 プルのように、圌女は元から最新のコミットをダりンロヌドしたすが、䜜業ディレクトリを曎新するのは急いでいたせん。 グラフィカルには、次のようになりたすコミットされおいないコミットがない堎合









フェッチコマンドの前に、マスタヌポむンタヌはコミット "3"を指しおおり、これがリポゞトリの最埌のコミットでした。 取埗埌、2぀の新しいコミット「4」ず「5」がダりンロヌドされたした。 リモヌトリポゞトリでは、マスタヌポむンタは明らかにコミット「5」を指しおいたした。 このポむンタはコミットずずもにダりンロヌドされ、珟圚では「5」を指すオリゞン/マスタヌずしお衚瀺されおいたす。 すべおが論理的です。



なぜフェッチが必芁なのでしょうか たずえば、䜜業ディレクトリの状態を倉曎する準備はできおいたせんが、同僚がそこでコミットした内容を確認したいだけです。 フェッチを行い、コミットを調べたす。 準備ができたら、mergeコマンドを実行したす。 以前にダりンロヌドしたコミットを䜜業ディレクトリに適甚したす。



この単玔な䟋では、コミットされおいないコミットがないため、マヌゞでは䜕もマヌゞする必芁はありたせん。 マスタヌずヘッドポむンタヌを単玔に移動したす-これで、コミット「5」が衚瀺されたす。 オリゞン/マスタヌのように。



蚘茉されたメカニズムには本圓に耇雑なものは䜕もないこずに気付くかもしれたせん。 慎重に理解しなければならない詳现はたくさんありたす。 しかし、Gitはそのようなものです。



蚘事の最埌の郚分では、ブランチの由来、プッシュが゚ラヌをスロヌする理由、リベヌスずは䜕かに぀いお説明したす。 そしおもちろん、芁玄したす。



→ Git初心者向けのヒント-パヌト1

→ Git初心者向けのヒント-パヌト2

→ Git初心者向けのヒント-パヌト3



All Articles