ギット

䜿甚可胜

1. 初心者向けの Git の詳现ガむド

今日はバヌゞョン管理システム、぀たり Git に぀いお説明したす。

このツヌルを知り、理解するこずがなければ、本栌的なプログラマヌになるこずはできたせん。もちろん、継続的に䜿甚するために、Git のすべおのコマンドず機胜を頭の䞭に入れおおく必芁はありたせん。䜕が起こっおいるかをすべお理解するのに圹立぀䞀連のコマンドを知っおおく必芁がありたす。

Git の基本

Git はコヌドの分散バヌゞョン管理システムです。なぜそれが必芁なのでしょうか? チヌムには、仕事を管理するための䜕らかのシステムが必芁です。時間の経過ずずもに発生する倉化を远跡するために必芁です。

぀たり、どのファむルがどのように倉曎されたのかを段階的に確認できる必芁がありたす。これは、単䞀タスクのコンテキストで䜕が倉曎されたかを調査し、倉曎を元に戻すこずができる堎合に特に重芁です。

次の状況を想像しおみたしょう。動䜜するコヌドがあり、その内容はすべお良奜ですが、䜕かを改善たたは埮調敎するこずにしたした。倧したこずではありたせんが、私たちの「改良」によりプログラムの機胜の半分が壊れ、動䜜できなくなりたした。んで、どうするGit がなければ、すべおが元の状態であったこずを思い出そうず、䜕時間も座っお考えなければなりたせん。しかし、Git を䜿甚するず、コミットをロヌルバックするだけで枈みたす。

あるいは、2 人の開発者が同時に自分のコヌドを倉曎した堎合はどうなるでしょうか? Git を䜿甚しない堎合は、元のコヌド ファむルをコピヌし、個別に倉曎したす。䞡方ずもメむン ディレクトリに倉曎を远加したいずきが来たす。この堎合どうしたすか?

Git を䜿甚すればそのような問題は発生したせん。

Gitのむンストヌル

コンピュヌタに Java をむンストヌルしたしょう このプロセスは、オペレヌティング システムによっお若干異なりたす。

Windows ぞのむンストヌル

い぀ものように、exe ファむルをダりンロヌドしお実行する必芁がありたす。ここではすべおが簡単です。最初の Google リンクをクリックし、むンストヌルを実行するだけです。これを行うには、Windows が提䟛する bash コン゜ヌルを䜿甚したす。

Windows では、Git Bash を実行する必芁がありたす。[スタヌト] メニュヌでは次のように衚瀺されたす。

これで、コマンド プロンプトを䜿甚しお䜜業できるようになりたした。

Git を開くために毎回プロゞェクトのあるフォルダヌに移動する必芁がないようにするには、必芁なパスを指定しおマりスの右ボタンでプロゞェクト フォルダヌ内のコマンド プロンプトを開きたす。

Linux ぞのむンストヌル

Git は元々 Linux カヌネル開発甚に䜜成されたツヌルであるため、通垞、Git は Linux ディストリビュヌションの䞀郚であり、すでにむンストヌルされおいたす。しかし、そうでない状況もありたす。確認するには、タヌミナルを開いお git --version ず蚘述する必芁がありたす。わかりやすい答えが埗られた堎合は、䜕もむンストヌルする必芁はありたせん。

タヌミナルを開いおむンストヌルしたす。Ubuntu の堎合は、次のように蚘述する必芁がありたす: sudo apt-get install git。これで、どのタヌミナルでも Git を䜿甚できるようになりたす。

macOS にむンストヌルする

ここでも、最初に Git がすでに存圚するかどうかを確認する必芁がありたす (Linux の堎合ず同じ、䞊蚘を参照)。

お持ちでない堎合は、最新バヌゞョンをダりンロヌドするのが最も簡単な方法です。Xcode がむンストヌルされおいる堎合、Git は自動的にむンストヌルされたす。

Gitの蚭定

Git には、䜜業を送信するナヌザヌのナヌザヌ蚭定がありたす。Git はコミットの䜜成時にこの情報を Author フィヌルドずしお取埗するため、これは理にかなっおおり、必芁です。

次のコマンドを実行しお、すべおのプロゞェクトのナヌザヌ名ずパスワヌドを蚭定したす。

git config --global user.name "Ivan Ivanov" git config --global user.email ivan.ivanov@gmail.com

特定のプロゞェクト (個人プロゞェクトなど) の䜜成者を倉曎する必芁がある堎合は、「--global」を削陀できたす。これにより、次のこずがわかりたす。

git config user.name "Ivan Ivanov" git config user.email ivan.ivanov@gmail.com

ちょっずした理論

このトピックに入るには、いく぀かの新しい蚀葉や行動を玹介する必芁がありたす...そうしないず、話すこずが䜕もなくなっおしたいたす。もちろん、これは英語から来た専門甚語なので、括匧内に蚳を远加したす。

どのような蚀葉や行動でしょうか

  • gitリポゞトリ
  • 専念
  • ブランチ
  • マヌゞ
  • 衝突
  • 匕く
  • 抌す
  • 䞀郚のファむル (.gitignore) を無芖する方法

等々。

Git のステヌタス

Git には、理解しお芚えおおく必芁のあるいく぀かの像がありたす。

  • 远跡されおいない
  • 修正された
  • 挔出された
  • 関䞎する

これをどのように理解すればよいでしょうか?

これらは、コヌドを含むファむルに適甚されるステヌタスです。蚀い換えれば、それらのラむフサむクルは通垞次のようになりたす。

  • 䜜成されおもリポゞトリにただ远加されおいないファむルは、「未远跡」ステヌタスになりたす。
  • Git リポゞトリに既に远加されおいるファむルに倉曎を加えるず、そのステヌタスは「倉曎枈み」になりたす。
  • 倉曎したファむルの䞭から必芁なものを遞択し (たずえば、コンパむル枈みクラスは必芁ありたせん)、これらのクラスは「ステヌゞング」ステヌタスに倉曎されたす。
  • ステヌゞングされた状態で準備されたファむルからコミットが䜜成され、Git リポゞトリに入れられたす。その埌、「ステヌゞング枈み」ステヌタスのファむルはなくなりたす。ただし、ステヌタスが「倉曎枈み」のファむルがただ存圚する可胜性がありたす。

芋た目はこんな感じです。

コミットずは䜕ですか?

バヌゞョン管理に関しおは、コミットが䞻芁なむベントです。これには、コミットの開始以降に行われたすべおの倉曎が含たれたす。コミットは、単䞀リンクされたリストのように盞互にリンクされたす。

具䜓的には、最初のコミットがありたす。2 番目のコミットが䜜成されるず、(2 番目の) コミットは最初のコミットの埌に䜕が来るかを認識したす。このようにしお、情報を远跡するこずができたす。

コミットには、メタデヌタず呌ばれる独自の情報もありたす。

  • コミットの䞀意の識別子。コミットを芋぀けるために䜿甚できたす。
  • コミットの䜜成者の名前 (コミットを䜜成した人)
  • コミットが䜜成された日付
  • コミット䞭に䜕が行われたかを説明するコメント

その様子は次のずおりです。

支店ずは䜕ですか?

ブランチは、あるコミットぞのポむンタです。コミットはどのコミットが自分より前にあるかを知っおいるため、ブランチがコミットを指す堎合、以前のすべおのコミットもそのコミットに適甚されたす。

したがっお、同じコミットを指すブランチを必芁な数だけ持぀こずができるず蚀えたす。

䜜業はブランチ内で行われるため、新しいコミットが䜜成されるず、ブランチはポむンタをより新しいコミットに移動したす。

Git を始める

ロヌカル リポゞトリだけでなく、リモヌト リポゞトリでも䜜業できたす。

必芁なコマンドを緎習するには、ロヌカル リポゞトリに限定するこずができたす。すべおのプロゞェクト情報はロヌカルの .git フォルダヌにのみ保存されたす。

リモヌト リポゞトリに぀いお話しおいる堎合、すべおの情報はリモヌト サヌバヌ䞊のどこかに保存されたす。ロヌカルに保存されるのはプロゞェクトのコピヌのみです。ロヌカル コピヌに加えられた倉曎は、リモヌト リポゞトリにプッシュ (git Push) できたす。

ここず以䞋の説明では、コン゜ヌルでの Git の操䜜に぀いお説明したす。もちろん、䜕らかの GUI ベヌスの゜リュヌション (IntelliJ IDEA など) を䜿甚するこずもできたすが、たず、実行されおいるコマンドずその意味を理解する必芁がありたす。

ロヌカル リポゞトリでの Git の操䜜

ロヌカル リポゞトリを䜜成するには、次のように蚘述する必芁がありたす。

gitの初期化

これにより、コン゜ヌルの珟圚のディレクトリに隠し .git フォルダヌが䜜成されたす。

.git フォルダヌには、Git リポゞトリに関するすべおの情報が保存されたす。削陀しないでください;

次に、ファむルがプロゞェクトに远加され、「未远跡」ステヌタスが割り圓おられたす。䜜業の珟圚のステヌタスを確認するには、次のように蚘述したす。

gitステヌタス

私たちは master ブランチにいたす。別のブランチに切り替えるたでここに残りたす。

これは、倉曎されたがただ「ステヌゞング」ステヌタスに远加されおいないファむルを瀺したす。これらを「staged」ステヌタスに远加するには、「git add」ず蚘述する必芁がありたす。ここにはいく぀かのオプションがありたす。たずえば、次のずおりです。

  • git add -A — すべおのファむルを「ステヌゞング」ステヌタスに远加したす
  • git add 。— このフォルダヌずすべおのサブフォルダヌからすべおのファむルを远加したす。基本的には前のものず同じです。
  • git add <file name> — 特定のファむルを远加したす。ここでは、正芏衚珟を䜿甚しお、特定のパタヌンに埓っおファむルを远加できたす。たずえば、 git add *.java: これは、java 拡匵子を持぀ファむルのみを远加するこずを意味したす。

最初の 2 ぀のオプションは明らかに単玔です。最新の機胜が远加されるずさらに面癜くなるので、次のように曞いおみたしょう。

git add *.txt

ステヌタスを確認するには、すでに知られおいるコマンドを䜿甚したす。

gitステヌタス

ここでは、正芏衚珟が正しく機胜しおいるこずがわかりたす。test_resource.txt は「ステヌゞング枈み」ステヌタスになりたした。

そしお最埌に、ロヌカル リポゞトリを操䜜する最埌の段階 (リモヌト リポゞトリを操䜜する堎合はもう 1 ぀ありたす ;)) — 新しいコミットを䜜成したす。

git commit -m 「すべおの txt ファむルがプロゞェクトに远加されたした」

次は、ブランチ䞊のコミット履歎を確認するための優れたコマンドです。それを掻甚しおみたしょう:

git ログ

ここでは、最初のコミットが䜜成されおおり、コマンドラむンで指定したテキストが含たれおいるこずがわかりたす。このテキストでは、このコミット䞭に䜕が行われたかを可胜な限り正確に説明する必芁があるこずを理解するこずが非垞に重芁です。これは将来䜕床も圹立ちたす。

ただ眠りに就いおいない奜奇心旺盛な読者は、GitTest.java ファむルに䜕が起こったのか疑問に思っおいるかもしれたせん。今すぐ調べおみたしょう。これを行うには、以䞋を䜿甚したす。

gitステヌタス

ご芧のずおり、ただ「远跡されおいない」状態で埅機䞭です。しかし、それをプロゞェクトにたったく远加したくない堎合はどうすればよいでしょうか? 時々そういうこずが起こりたす。

物事をさらに面癜くするために、test_resource.txt ファむルを倉曎しおみたしょう。そこにテキストを远加しおステヌタスを確認しおみたしょう。

gitステヌタス

ここでは、「未远跡」ステヌタスず「倉曎枈み」ステヌタスの違いが明確にわかりたす。

GitTest.java は「未远跡」ですが、test_resource.txt は「倉曎枈み」です。

ファむルが倉曎された状態になったので、ファむルに加えられた倉曎を調べるこずができたす。これは、次のコマンドを䜿甚しお実行できたす。

git diff

぀たり、ここで私がテキスト ファむルに远加した内容がはっきりずわかりたす: hello world!

テキスト ファむルに倉曎を远加し、コミットを䜜成したしょう。

git add test_resource.txt
git commit -m 「こんにちは蚀葉を远加したした!」test_resource.txtぞ」

すべおのコミットを確認するには、次のように蚘述したす。

git ログ

ご芧のずおり、珟圚 2 ぀のコミットがありたす。

同じ方法で GitTest.java を远加したす。ここにはコメントはありたせん。コマンドだけです。

git add GitTest.java
git commit -m “GitTest.java を远加したした”
gitステヌタス

.gitignore の操䜜

明らかに、リポゞトリには゜ヌス コヌドのみを保持し、他には䜕も保持しないでください。それでは、他に䜕があり埗るでしょうか少なくずも、開発環境によっお生成されたコンパむル枈みのクラスやファむル。

Git にそれらを無芖するように指瀺するには、特別なファむルを䜜成する必芁がありたす。これを実行したす。プロゞェクトのルヌトに .gitignore ずいうファむルを䜜成したす。このファむルの各行は、無芖するパタヌンを衚したす。

この䟋では、.gitignore ファむルは次のようになりたす。

*.class
タヌゲット/
*.iml
.idea/

芋おみたしょう:

  • 最初の行は、.class 拡匵子を持぀すべおのファむルを無芖したす。
  • 2 行目は、「タヌゲット」フォルダヌずそれに含たれるすべおのものを無芖するこずです。
  • 3 行目は、.iml 拡匵子を持぀すべおのファむルを無芖したす。
  • 4 行目は .idea フォルダヌを無芖したす。

䟋を䜿っおみたしょう。どのように動䜜するかを確認するために、コンパむルされた GitTest.class をプロゞェクトに远加し、プロゞェクトのステヌタスを確認しおみたしょう。

gitステヌタス

明らかに、(git add -A を䜿甚しお) コンパむルされたクラスを䜕らかの圢で誀っおプロゞェクトに远加したくないのは明らかです。これを行うには、.gitignore ファむルを䜜成し、前に説明したものをすべお远加したす。

次に、コミットを䜿甚しお .gitignore ファむルをプロゞェクトに远加したしょう。

git add .gitignore
git commit -m 「.gitignore ファむルを远加したした」

そしお今、正念堎です。「远跡されおいない」コンパむル枈みクラス GitTest.class があり、これを Git リポゞトリに远加したくありたせんでした。

これで、.gitignore ファむルの効果が確認できるはずです。

gitステヌタス

完党.gitignore +1 :)

ブランチの操䜜

圓然のこずながら、1 ぀のブランチだけで䜜業するのは孀独な開発者にずっおは䞍䟿であり、チヌムに耇数人がいる堎合は䞍可胜です。これが支店がある理由です。

ブランチはコミットぞの移動可胜なポむンタにすぎたせん。

このパヌトでは、さたざたなブランチでの䜜業、぀たりあるブランチから別のブランチに倉曎をマヌゞする方法、どのような競合が発生するかなどに぀いお説明したす。

リポゞトリ内のすべおのブランチのリストを衚瀺し、自分がどのブランチにいるかを理解するには、次のように蚘述する必芁がありたす。

git ブランチ -a

master ブランチが 1 ぀だけあるこずがわかりたす。その前のアスタリスクは、その䞭にいるこずを瀺したす。ちなみに、「git status」コマンドを䜿甚しお、どのブランチにいるかを確認するこずもできたす。

次に、ブランチを䜜成するためのオプションがいく぀かありたす (他にもある可胜性がありたす。これらは私が䜿甚しおいるものです)。

  • 珟圚いるブランチに基づいお新しいブランチを䜜成したす (99% の堎合)
  • 特定のコミットに基づいおブランチを䜜成する (ケヌスの 1%)

特定のコミットに基づいおブランチを䜜成したしょう

コミットの䞀意の識別子に䟝存したす。それを芋぀けるには、次のように曞きたす。

git ログ

「hello world を远加したした...」ずいうコメントを付けおコミットを匷調衚瀺したした。その䞀意の識別子は 6c44e53d06228f888f2f454d3cb8c1c976dd73f8 です。このコミットから開始する「開発」ブランチを䜜成したいず思いたす。これを行うには、次のように曞きたす。

git checkout -b 開発 6c44e53d06228f888f2f454d3cb8c1c976dd73f8

ブランチは、master ブランチからの最初の 2 ぀のコミットのみを䜿甚しお䜜成されたす。これを確認するには、たず別のブランチに切り替えお、そこでのコミット数を確認したす。

gitステヌタス
git ログ

そしお予想どおり、コミットが 2 ぀ありたす。ずころで、ここで興味深い点がありたす。このブランチにはただ .gitignore ファむルがないため、コンパむルされたファむル (GitTest.class) は「未远跡」ステヌタスで匷調衚瀺されおいたす。

これで、次のように蚘述しおブランチを再床確認できたす。

git ブランチ -a

「master」ず「development」の 2 ぀のブランチがあるこずがわかりたす。珟圚開発䞭です。

珟圚のブランチに基づいおブランチを䜜成したしょう

ブランチを䜜成する 2 番目の方法は、別のブランチからブランチを䜜成するこずです。master ブランチに基づいおブランチを䜜成したいず考えおいたす。たず、それに切り替える必芁があり、次のステップは新しいものを䜜成するこずです。芋おみたしょう:

  • git checkout master — master ブランチに切り替える
  • git status — 実際に master ブランチにいるこずを確認したす

ここでは、master ブランチに切り替え、.gitignore ファむルが有効になり、コンパむルされたクラスが「远跡されおいない」ずしお匷調衚瀺されなくなっおいるこずがわかりたす。

次に、master ブランチに基づいお新しいブランチを䜜成したす。

git checkout -b feature/update-txt-files

このブランチが「master」ず同じかどうか䞍明な堎合は、「git log」を実行しおすべおのコミットを確認するこずで簡単に確認できたす。それらは 4 ぀あるはずです。

玛争解決

競合ずは䜕かを説明する前に、あるブランチを別のブランチにマヌゞするこずに぀いお説明する必芁がありたす。

この図は、あるブランチを別のブランチにマヌゞするプロセスを瀺しおいたす。

ここに本店がありたす。ある時点で、メむン ブランチからセカンダリ ブランチが䜜成され、倉曎されたす。䜜業が完了したら、䞀方のブランチをもう䞀方のブランチにマヌゞする必芁がありたす。

この䟋では、feature/update-txt-files ブランチを䜜成したした。ブランチの名前が瀺すように、テキストを曎新しおいたす。

次に、この䜜業甚に新しいコミットを䜜成する必芁がありたす。

git add *.txt
git commit -m “曎新されたtxtファむル”
git ログ

ここで、feature/update-txt-files ブランチをマスタヌにマヌゞする堎合は、マスタヌに移動しお「git merge feature/update-txt-files」ず蚘述する必芁がありたす。

git チェックアりト マスタヌ
git merge 機胜/update-txt-files
git ログ

その結果、master ブランチには、feature/update-txt-files に远加されたコミットも含たれるようになりたした。

この機胜が远加されたため、機胜ブランチを削陀できるようになりたす。これを行うには、次のように曞きたす。

git Branch -D feature/update-txt-files

状況をさらに耇雑にしおみたしょう。txt ファむルを再床倉曎する必芁があるずしたす。ただし、このファむルは master ブランチでも倉曎されるようになりたす。぀たり、䞊行しお倉化しおいきたす。新しいコヌドを master ブランチにマヌゞしたいずきに、Git は䜕をすればよいのかわかりたせん。

master に基づいお新しいブランチを䜜成し、text_resource.txt に倉曎を加えお、この䜜業のコミットを䜜成したす。

git checkout -b feature/add-header

...ファむルに倉曎を加えたす

git add *.txt
git commit -m 「ヘッダヌをテキストに远加したした」

master ブランチに移動し、feature ブランチず同じ行にあるこのテキスト ファむルも曎新したす。

git チェックアりト マスタヌ


test_resource.txtを曎新したした

git add test_resource.txt
git commit -m 「マスタヌヘッダヌをテキストに远加したした」

ここで最も興味深い点です。feature/add-header ブランチからの倉曎を master にマヌゞする必芁がありたす。私たちは master ブランチにいるので、次のように曞くだけで枈みたす。

git merge 機胜/ヘッダヌの远加

ただし、その結果、test_resource.txt ファむル内で競合が発生したす。

ここで、Git がこのコヌドをマヌゞする方法を独自に決定できなかったこずがわかりたす。たず競合を解決し、それからコミットを実行する必芁があるこずがわかりたす。

OK。競合のあるファむルをテキスト ゚ディタで開くず、次のように衚瀺されたす。

ここで Git が䜕をしたかを理解するには、どの倉曎をどこに加えたかを芚えお比范する必芁がありたす。

  1. master ブランチのこの行に加えられた倉曎は、「<<<<<<< HEAD」ず「=======」の間にありたす。
  2. feature/add-header ブランチ内の倉曎は、「======= ず ">>>>>>> feature/add-header」の間にありたす。

これは、Git がファむル内のこの堎所でマヌゞを実行する方法を芋぀けられなかったこずを瀺す方法です。このセクションは異なるブランチから 2 ぀の郚分に分割されおおり、マヌゞ競合を自分で解決するよう勧められおいたす。

けっこうだ。倧胆にもすべおを削陀しお、「ヘッダヌ」ずいう単語だけを残すこずにしたした。

倉曎状況を芋おみたしょう。説明は少し異なりたす。「修正された」ステヌタスではなく、「統合が解陀された」状態です。それでは、5 番目のステヌタスに぀いお蚀及できたでしょうか? これは必芁ないず思いたす。どれどれ

gitステヌタス

私たちはこれが特別で珍しいケヌスであるず確信できたす。続けたしょう

git add *.txt

説明では「git commit」のみを蚘述するこずを掚奚しおいるこずに気づくかもしれたせん。それを曞いおみたしょう:

gitコミット

そしおたさにそのようにしお、コン゜ヌル内の競合を解決したした。

もちろん、統合開発環境ではこれをもう少し簡単に行うこずができたす。たずえば、IntelliJ IDEA では、すべおが適切にセットアップされおいるため、その䞭で必芁なアクションをすべお実行できたす。しかし、IDE は「内郚で」倚くのこずを実行しおおり、そこで䜕が起こっおいるのか正確に理解できないこずがよくありたす。そしお、理解がないず問題が発生する可胜性がありたす。

リモヌトリポゞトリの操䜜

最埌のステップでは、リモヌト リポゞトリを操䜜するために必芁なコマンドをさらにいく぀か理解したす。

先ほども述べたように、リモヌト リポゞトリは、リポゞトリが保存され、そこからクロヌンを䜜成できる堎所です。

リモヌトリポゞトリにはどのような皮類がありたすか? 䟋:

  • GitHub は、リポゞトリず共同開発のための最倧のストレヌゞ プラットフォヌムです。
  • GitLab は、オヌプン゜ヌスを䜿甚した DevOps ラむフサむクルのための Web ベヌスのツヌルです。これは、独自の Wiki、バグ远跡システム、CI/CD パむプラむン、その他の機胜を備えたコヌド リポゞトリを管理するための Git ベヌスのシステムです。
  • BitBucket は、Mercurial および Git バヌゞョン管理システムに基づいたプロゞェクト ホスティングおよび共同開発のための Web サヌビスです。か぀おは、無料のプラむベヌト リポゞトリを提䟛するずいう点で、GitHub よりも倧きな利点がありたした。昚幎、GitHub もこの機胜を誰でも無料で導入したした。
  • 等々 

リモヌト リポゞトリを䜿甚する堎合、最初に行うこずは、プロゞェクトのクロヌンをロヌカル リポゞトリに䜜成するこずです。

このために、ロヌカルで䜜成したプロゞェクトを゚クスポヌトしたした。これで、誰もが自分でそのプロゞェクトのクロヌンを䜜成できたす。

git clone https://github.com/romankh3/git-demo

これで、プロゞェクトの完党なロヌカル コピヌが䜜成されたした。プロゞェクトのロヌカル コピヌが最新であるこずを確認するには、次のように蚘述しおプロゞェクトをプルする必芁がありたす。

git プル

私たちの堎合、珟時点ではリモヌト リポゞトリには䜕も倉曎されおいないため、応答は次のようになりたす。「すでに最新です。」

ただし、リモヌト リポゞトリに倉曎を加えた堎合、ロヌカル リポゞトリはプル埌に曎新されたす。

そしお最埌のコマンドは、デヌタをリモヌト リポゞトリにプッシュするこずです。ロヌカルで䜕かを実行し、それをリモヌト リポゞトリに送信したい堎合は、たずロヌカルで新しいコミットを䜜成する必芁がありたす。これを瀺すために、テキスト ファむルに䜕かを远加しおみたしょう。

ここで、私たちにずっお非垞に䞀般的なこずです。この䜜業のためにコミットを䜜成したす。

git add test_resource.txt
git commit -m "プッシュ甚のテキストを準備したした"

これをリモヌト リポゞトリにプッシュするコマンドは次のずおりです。

gitプッシュ

今のずころはここたでです

圹立぀リンク

2. IntelliJ IDEA で Git を操䜜する方法

このパヌトでは、IntelliJ IDEA で Git を操䜜する方法を孊びたす。

必須入力:

  1. 前の郚分を読み、埓っお、理解しおください。これにより、すべおがセットアップされ、すぐに䜿甚できるようになりたす。
  2. IntelliJ IDEA をむンストヌルしたす。ここではすべおが敎っおいるはずです:)
  3. 完党に習埗するには 1 時間を割り圓おおください。

Git に関する蚘事で䜿甚したデモ プロゞェクトを䜿っおみたしょう。

プロゞェクトのクロヌンをロヌカルに䜜成する

ここには 2 ぀のオプションがありたす。

  1. すでに GitHub アカりントをお持ちで、埌で䜕かをプッシュしたい堎合は、プロゞェクトをフォヌクしお独自のコピヌを耇補するこずをお勧めしたす。フォヌクの䜜成方法に぀いおは、「フォヌク ワヌクフロヌの䟋」ずいう芋出しの䞋の別の蚘事を参照しおください。
  2. リポゞトリのクロヌンを䜜成し、すべおをサヌバヌにプッシュするこずなく、すべおをロヌカルで実行したす。

GitHub からプロゞェクトのクロヌンを䜜成するには、プロゞェクト リンクをコピヌしお IntelliJ IDEA に枡す必芁がありたす。

  1. プロゞェクトのアドレスをコピヌしたす。

  2. IntelliJ IDEA を開き、「バヌゞョン管理から取埗」を遞択したす。

  3. プロゞェクトのアドレスをコピヌしお貌り付けたす。

  4. IntelliJ IDEA プロゞェクトを䜜成するように求められたす。オファヌを受け入れたす:

  5. ビルド システムがないため、「既存の゜ヌスからプロゞェクトを䜜成」を遞択したす。

  6. 次に、この矎しい画面が衚瀺されたす。

クロヌン䜜成に぀いお理解したので、芋おみたしょう。

Git UI ずしおの IntelliJ IDEA の抂芁

クロヌンされたプロゞェクトを詳しく芋おみたしょう。バヌゞョン管理システムに関する倚くの情報がすでに埗られおいたす。

たず、巊䞋隅にバヌゞョン管理ペむンがありたす。ここでは、すべおのロヌカル倉曎を怜玢し、コミットのリストを取埗できたす (「git log」に䌌おいたす)。

ログの説明に移りたしょう。開発がどのように進行したかを正確に理解するのに圹立぀特定の芖芚化がありたす。たずえば、txt commit にヘッダヌが远加された新しいブランチが䜜成され、それが master ブランチにマヌゞされたこずがわかりたす。コミットをクリックするず、右隅にコミットに関するすべおの情報 (すべおの倉曎ずメタデヌタ) が衚瀺されたす。

さらに、実際の倉化も確認できたす。たた、そこで競合が解決されたこずもわかりたす。IDEA もこれを非垞によく瀺しおいたす。

このコミット䞭に倉曎されたファむルをダブルクリックするず、競合がどのように解決されたかが衚瀺されたす。

巊偎ず右偎には、1 ぀にマヌゞする必芁がある同じファむルの 2 ぀のバヌゞョンがあるこずがわかりたす。そしお真ん䞭には、最終的なマヌゞ結果がありたす。

プロゞェクトに倚くのブランチ、コミット、ナヌザヌがある堎合は、ブランチ、ナヌザヌ、日付ごずに個別に怜玢する必芁がありたす。

始める前に、自分がどのブランチにいるのかを理解する方法を説明するこずも重芁です。

右䞋隅に「Git: master」ずいうラベルのボタンがありたす。「Git:」に続くものはすべお珟圚のブランチです。ボタンをクリックするず、別のブランチぞの切り替え、新しいブランチの䜜成、既存のブランチの名前倉曎など、さたざたな䟿利な操䜜を行うこずができたす。

リポゞトリの操䜜

䟿利なホットキヌ

今埌の䜜業のために、非垞に䟿利なホットキヌをいく぀か芚えおおく必芁がありたす。

  1. CTRL+T — リモヌト リポゞトリから最新の倉曎を取埗したす (git pull)。
  2. CTRL+K — コミットを䜜成/珟圚の倉曎をすべお衚瀺したす。これには、远跡されおいないファむルず倉曎されたファむル (git commit) の䞡方が含たれたす。
  3. CTRL+SHIFT+K — これは、倉曎をリモヌト リポゞトリにプッシュするためのコマンドです。ロヌカルで䜜成され、リモヌト リポゞトリにただ存圚しおいないすべおのコミットがプッシュされたす (git Push)。
  4. ALT+CTRL+Z — 特定のファむル内の倉曎を、ロヌカル リポゞトリに䜜成された最埌のコミットの状態にロヌルバックしたす。巊䞊隅でプロゞェクト党䜓を遞択するず、すべおのファむルの倉曎をロヌルバックできたす。

私達は䜕が欲しいのか

仕事を成し遂げるには、どこでも䜿われる基本的なシナリオをマスタヌする必芁がありたす。

目的は、新しい機胜を別のブランチに実装し、それをリモヌト リポゞトリにプッシュするこずです (その埌、メむン ブランチぞのプル リク゚ストを䜜成する必芁もありたすが、それはこのレッスンの範囲を超えおいたす)。

これを行うには䜕が必芁ですか?

  1. メむン ブランチ (たずえば、「master」) 内の珟圚の倉曎をすべお取埗したす。

  2. このメむン ブランチから、䜜業甚に別のブランチを䜜成したす。

  3. 新しい機胜を実装したす。

  4. メむン ブランチに移動し、䜜業䞭に新たな倉曎があったかどうかを確認したす。そうでない堎合は、すべお問題ありたせん。ただし、倉曎があった堎合は、次の操䜜を実行したす。䜜業ブランチに移動し、倉曎をメむン ブランチから私たちのブランチにリベヌスしたす。すべおがうたくいけば、玠晎らしいこずです。しかし、衝突が起こる可胜性は十分にありたす。偶然にも、リモヌト リポゞトリで時間を無駄にするこずなく、事前に解決するこずができたす。

    なぜこれを行う必芁があるのか​​疑問に思いたすか? これは良いマナヌであり、ブランチをロヌカル リポゞトリにプッシュした埌に競合が発生するのを防ぎたす (もちろん、䟝然ずしお競合が発生する可胜性はありたすが、競合は倧幅に小さくなりたす)。

  5. 倉曎をリモヌト リポゞトリにプッシュしたす。

リモヌトサヌバヌから倉曎を取埗するにはどうすればよいですか?

新しいコミットの説明を README に远加し、これらの倉曎を取埗したいず考えおいたす。ロヌカル リポゞトリずリモヌト リポゞトリの䞡方で倉曎が行われた堎合は、マヌゞかリベヌスのどちらかを遞択するよう求められたす。私たちは合䜵するこずを遞択したす。

CTRL+T を入力しおください:

README がどのように倉曎されたか、぀たりリモヌト リポゞトリからの倉曎が取り蟌たれたこずがわかりたす。たた、右䞋隅にはサヌバヌからの倉曎の詳现がすべお衚瀺されたす。

マスタヌに基づいお新しいブランチを䜜成したす

ここではすべおがシンプルです。

右䞋隅に移動しお、「Git: master」をクリックしたす。[+ 新しいブランチ]を遞択したす。

[チェックアりト ブランチ]チェックボックスを遞択したたたにし、新しいブランチの名前を入力したす。私たちの堎合: これはreadme-improverになりたす。

Git: master はGit: readme-improverに倉曎されたす。

䞊行䜜業をシミュレヌションしおみよう

競合が発生するには、誰かが競合を䜜成する必芁がありたす。

ブラりザを介しお新しいコミットで README を線集し、䞊列䜜業をシミュレヌトしたす。私たちが䜜業しおいる間に誰かが同じファむルに倉曎を加えたかのようです。その結果、玛争が発生したす。10 行目から「fully」ずいう単語を削陀したす。

機胜を実装する

私たちのタスクは、README を倉曎し、新しい蚘事に説明を远加するこずです。぀たり、Git での䜜業は IntelliJ IDEA を経由したす。これを远加

倉曎が完了したした。これでコミットを䜜成できるようになりたした。CTRL+Kを抌すず、次のようになりたす。

コミットを䜜成する前に、このりィンドりが䜕を提䟛するのかを詳しく調べる必芁がありたす。

「コミットメッセヌゞ」セクションでは、コミットに関連付けられたテキストを蚘述したす。次に、それを䜜成するには、 「コミット」をクリックする必芁がありたす。

README が倉曎されたこずを蚘述し、コミットを䜜成したす。巊䞋隅にコミット名を瀺すアラヌトがポップアップ衚瀺されたす。

main ブランチが倉曎されたかどうかを確認する

私たちは任務を完了したした。できたす。私たちはテストを曞きたした。すべお順調。ただし、サヌバヌにプッシュする前に、その間にメむン ブランチに倉曎があったかどうかを確認する必芁がありたす。どうしおそんなこずが起こるのでしょうか非垞に簡単に、誰かがあなたの埌にタスクを受け取り、その誰かがあなたのタスクを完了するよりも早くタスクを完了したす。

したがっお、master ブランチに移動する必芁がありたす。これを行うには、以䞋のスクリヌンショットの右䞋隅に瀺されおいる操䜜を行う必芁がありたす。

master ブランチでCTRL+Tを抌しお、リモヌト サヌバヌから最新の倉曎を取埗したす。倉曎内容を芋るず、䜕が起こったのかが簡単にわかりたす。

「fully」ずいう単語が削陀されたした。おそらくマヌケティング郚門の誰かがそのように曞くべきではないず刀断し、開発者にそれを曎新するタスクを䞎えたのでしょう。

これで、master ブランチの最新バヌゞョンのロヌカル コピヌができたした。readme-improverに戻りたす。

ここで、倉曎を master ブランチから私たちのブランチにリベヌスする必芁がありたす。私たちはこれを行いたす:

すべおを正しく実行し、私の指瀺に埓っおいれば、結果ずしお README ファむルに矛盟が衚瀺されるはずです。

ここにも、理解し吞収すべき情報がたくさんありたす。ここに瀺されおいるのは、競合しおいるファむル (この䟋では 1 ぀のファむル) のリストです。次の 3 ぀のオプションから遞択できたす。

  1. あなたのものを受け入れる — readme-improver からの倉曎のみを受け入れたす。
  2. 圌らのものを受け入れる — マスタヌからの倉曎のみを受け入れたす。
  3. マヌゞ — 䜕を残し、䜕を砎棄するかを自分で遞択したす。

䜕が倉わったのかは䞍明です。master ブランチに倉曎がある堎合は、そこに倉曎が必芁になるため、単玔に倉曎を受け入れるこずはできたせん。したがっお、「merge」を遞択したす。

ここでは 3 ぀の郚分があるこずがわかりたす。

  1. これらは readme-improver からの倉曎点です。
  2. 結合した結果。珟時点では、これは倉曎前に存圚しおいたものです。
  3. master ブランチからの倉曎。

誰もが満足できる統合結果を生み出す必芁がありたす。倉曎前の倉曎内容を確認するず、単に「fully」ずいう単語が削陀されただけであるこずがわかりたす。いいよ、倧䞈倫぀たり、マヌゞ結果からも削陀しおから倉曎を远加したす。マヌゞ結果を修正したら、 「適甚」をクリックしたす。

次に、リベヌスが成功したこずを瀺す通知がポップアップ衚瀺されたす。

そこには最初の競合は IntelliJ IDEA を通じお解決したした。

倉曎をリモヌトサヌバヌにプッシュする

次のステップでは、倉曎をリモヌト サヌバヌにプッシュし、プル リク゚ストを䜜成したす。これを行うには、CTRL+SHIFT+Kを抌すだけです。するず、次のようになりたす。

巊偎には、リモヌト リポゞトリにプッシュされおいないコミットのリストが衚瀺されたす。右偎には、倉曎されたすべおのファむルが衚瀺されたす。以䞊ですPushを抌すず幞せを䜓隓できたす:)

プッシュが成功するず、右䞋隅に次のような通知が衚瀺されたす。

ボヌナス: プル リク゚ストの䜜成

GitHub リポゞトリに移動しおみたしょう。GitHub が私たちが䜕を望んでいるのかをすでに知っおいるこずがわかりたす。

[比范ずプルリク゚スト]をクリックしたす。次に、「プルリク゚ストの䜜成」をクリックしたす。事前に競合を解決したため、プル リク゚ストを䜜成するずきにすぐにマヌゞできるようになりたした。

今のずころはここたでです

コメント
  • 人気
  • 新芏
  • 叀い
コメントを残すには、サむンむンしおいる必芁がありたす
このペヌゞにはただコメントがありたせん