TortoiseGitをインストールしたので色々と操作を試してみました
今までSubversionしか使ったことがないので、とりあえず比較的よく使いそうなGitの操作検証を実施してやり方や動作結果の確認を行いました
本手順は、GitLabとTortoiseGitが導入済の前提で進めます
また、リモートリポジトリをローカルへクローン済です
GitLabの環境構築については以下を参考にしてください
https://ramendelicious.com/2024/08/07/gitlab-self-managed%e3%82%92almalinux9%e3%81%ab%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%97%e3%81%9f%e3%80%90gitlab-%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%b7%a8%e3%80%91/
TortoiseGitのインストール、リモートリポジトリをクローンについては以下を参考にしてください
https://ramendelicious.com/2024/08/07/gitlab%e3%82%92%e4%bd%bf%e3%81%86%e3%81%9f%e3%82%81tortisegit%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%97%e3%81%9f%e3%80%90git-%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3/
コミット
ローカルリポジトリのフォルダ内にgit_test.txtを作成します
作成したファイルの中身には何でもよいので文字を入れておいてください
入れる文字は、本当に何でもいいです
Gitのバージョン管理下に置くために、ファイルを追加する必要があります
ファイルを右クリックし、[TortoiseGit]-[追加]をクリックします
エラーが出なければ大丈夫です
1つ階層を上がりフォルダを右クリックし、「Gitコミット」をクリックします
コミットしたいファイルにチェックが付いていることを確認します
問題なければメッセージを入力して、「コミット」をクリックします
メッセージには修正や機能追加の内容がわかるよう記入しておくと、後から見直したときや他の人が見たときに理解がしやすいです
エラーが出なければOKです
リモートリポジトリへのプッシュはまだ実施してないので、git_test.txtがリモートリポジトリへアップロードされていないことを確認します
GitLabへアクセスします
該当のプロジェクト名をクリックします
「名前」の項目を確認します
先ほどと同様にREADMEしか表示されていないため、リモートリポジトリにはアップロードされていないことが確認できました
プッシュ
ローカルリポジトリにコミットしたgit_test.txtをリモートリポジトリへ “プッシュ” します
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[プッシュ]をクリックします
そのまま「OK」をクリックします
作業完了するまで待ちます
GitLabにアクセスし、プロジェクトを開きます
該当のリポジトリのプロジェクト名をクリックします
git_test.txtが表示されていれば、プッシュ成功です
ファイル名をクリックすると中身も確認できます
ばっちりですね
プル
今度はリモートリポジトリ側に加えられた変更を、ローカルリポジトリへ “プル” してみます
GitLabにアクセスします
先ほど開いたプロジェクト内の「編集」をクリックします
別タブでエディターが開きます
左上の「New File…」をクリックして適当な名前でファイルを作ります(拡張子はtxtにしました)
作ったら中にこれまた適当な文字を入力しておきましょう
左ペインからコミットマーク?をクリックし、Changesに先ほどのファイルが表示されていることを確認したうえで「Commit to ‘main’」をクリックします
続けるか警告が出ますので、「Continue」をクリックします
しばらくすると右下に「Success」と出ます
出たらコミット完了です
※ こちらのエディタは閉じて大丈夫です
元のタブに戻り、画面を更新すると先ほど作成されたファイルが確認できます
リモートリポジトリは更新できましたので、クライアントのローカルリポジトリを開きます
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[プル]をクリックします
そのまま「OK」をクリックします
しばし待ちます
先ほど作成したファイルが表示されるようになりました
(中に入力した文字も表示されるか見てみると尚良いでしょう)
新しいブランチの作成
ローカルリポジトリ上で新しくブランチを作成し、リモートリポジトリへプッシュします
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[ブランチを作成]をクリックします
開発用のブランチを作る想定で実施しますので下記の通り設定したうえで、「OK」をクリックします
ブランチ名:develop
基点:HEAD(main)
オプション:新しいブランチに切り替える ※ 作成後にすぐ開発ブランチで操作するため
説明:開発用
今回はちょろっと検証したかっただけなのでdevelopにしましたが、大規模な開発になってくると命名規則が大事になってくるそうなので下記サイトなどを参考にしたいなと思いました
https://takeda-no-nao.net/programming/git/git-branch-naming-convention
少し待ち、完了したら「閉じる」をクリックします
testフォルダを開いているエクスプローラーの左上を確認すると、ブランチがdevelopに変わっていることがわかります
まだリモートリポジトリにブランチが反映されていないのでpushします
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[プッシュ]をクリックします
そのまま「OK」をクリックします
“develop”のリモートリポジトリはまだ作成していませんが、Refのリモートの欄を空欄にしておくことで今回のプッシュで作成されます
GitLabにアクセスし、testプロジェクトのブランチを確認するとdevelopが増えていることが確認できます
ブランチの切替
開発ブランチからmainブランチに切り替えてみます
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[切り替え/チェックアウト]をクリックします
mainブランチに切り替えたいので、ブランチを「main」に変更して「OK」をクリックする
testフォルダを開いているエクスプローラーの左上を確認すると、ブランチがmainに変わっていることがわかります
マージ
マージは別のブランチで更新された内容を現在のブランチに取り込む作業です
例えば開発ブランチを編集しているときに、誰かがmainブランチを更新した、ということがあると思います
その際は開発ブランチにmainブランチの内容を取り込みます
mainブランチに2か所変更を加えたうえでコミットします
・開発ブランチにもすでにあるファイル「git_test.txt」に文字列を追記
・開発ブランチにはまだない新規ファイル「new.txt」を追加
※ testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[追加]をします
ローカルリポジトリのmainブランチにコミットします
コミット完了画面からそのままリモートリポジトリのmainブランチへプッシュを行います
ブランチを開発ブランチに切り替えます
切替が完了したらそのまま「マージ」をクリックします
Fromのブランチがmainになっていることを確認して「OK」をクリックします
マージが完了しました
ブランチを削除をクリックするとmainブランチが消えてしまうので、そのまま閉じます
developブランチ内にnew.txtが作成されたことを確認します
git_test.txtの中身も先ほど追加した文言が表示されていることを確認します
コミットの整理
何度もコミットしていると、後から見返したときに変更内容がわかりづらくなるので、リモートリポジトリへプッシュする前にコミットの整理をします
開発ブランチ内で、何かしら変更して3回ほどコミットします
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[ログを表示]をクリックします
直近の3回分のコミットを選択して右クリックし、[一つのコミットに集約]をクリックします
メッセージを今回のコミット用に入力し、「コミット」をクリックします
先ほどの3つのコミットが消えて、1つのコミットになりました
フェッチ
フェッチはリモートリポジトリの最新の履歴の取得をします
プルは内容と履歴をマージしますが、履歴のみ最新を確認したいときはこのフェッチを使うようです
プルとフェッチの違いはこちらのサイトが一番わかりやすかったです
https://backlog.com/ja/git-tutorial/stepup/15/
リモートリポジトリの開発ブランチに新しいファイル「fetch.txt」を作成し、中に文字列を入力しました(それぞれコミットしたので合計2回コミット)
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[フェッチ]をクリックします
そのまま「OK」をクリックします
testフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[ログを表示]をクリックします
見えませんね。。。
どうやらログの表示の中にある「すべてのブランチ」オプションにチェックを入れないといけないらしいです
「すべてのブランチ」にチェックを入れるとフェッチで取得した履歴が表示されました
Add new file とか Update file fetch.txtのメッセージがそれです
ログを閉じて、testフォルダ内に「fetch.txt」が作成されていないことを確認します
作成されていなかったので、履歴だけ更新できたことが確認できました
リベース
マージ同様、ブランチ間の内容を結合するという点については同じですが、履歴の結合については大きな違いがあります
違いを理解するうえで、下記を参考にさせていただきました
リベースとマージの違い(図で説明)
マージは、ブランチを結合する前に実施したコミット履歴は分岐したままの見え方になります
★mainブランチに開発ブランチをマージした場合の履歴
リベースは、結合する前に実施したコミット履歴の分岐がなくなり、その時のコミットがリベース先に直線状に追加されたような履歴の見え方になります
★mainブランチに開発ブランチをリベースした場合の履歴
リベースを使用することのメリット・デメリットは説明が難しかったので、別の詳しく解説しているサイト等をご参照下さい
私は下記のサイトを参考にさせていただきました
※ リベースは使い方にも注意が必要なようです
TortoiseGitでリベース
mainブランチに開発ブランチをリベースしてみます
mainブランチと開発ブランチ、それぞれで何回か更新を加えてみました
現在ログは以下のような状況になっています
※ 「すべてのブランチ」にチェックが入っていない場合は、入れてください
developブランチでtestフォルダ内の何もない白いところを右クリックし、[TortoiseGit]-[リベース(ブランチの付け替え)]をクリックします
上流をmainブランチにしてリベースします
リベース後、ログを確認します
グラフ部分が一本に統一されました
リセット
リセットは指定したコミットまで内容を戻します
ログを開き、何個か前のメッセージを右クリックし、「”main”をここへリセット」をクリックします
リセットのレベルには3通りレベルがあり、それによって挙動が異なるそうです
https://qiita.com/Sammy_U/items/e37c7242544fd1da81be
今回は、Hardで試してみます
ログが見づらいので「すべてのブランチ」のチェックは外します
最新のログは先ほど戻し先に指定したコミットになっていることが確認できました
ちなみに戻した地点以降に追加していたファイルがあった場合は、下記ファイルのようにGit管理外になります
管理外のファイルをまとめて消したい場合はクリーンアップします
リセット後、プッシュでエラーが出る場合があります
ローカルリポジトリの古いバージョンにリモートリポジトリを合わせることになるので、エラーが出ています
強制オプションを付けることでプッシュできますが、リモートリポジトリにしかないファイルがある場合消えてしまうので本番環境でなく検証環境の時など、問題ないと判断できる場合のみ実施しましょう
強制プッシュする場合は、プッシュ画面のオプションに「強制」があるので、そちらにチェックを入れてプッシュします
リバート
リバートは、コミットを戻しつつ、戻したことをログに残します
ログを開き、何個か前のメッセージを右クリックし、「このコミットの変更を戻す」をクリックします
※ 今回は「hhahaha…txt」というファイルを追加したときのコミットを選択しています
「hhahaha…txt」という名前のファイルを追加したコミットがなくなったことがわかります
確認したらログを閉じて、実際にファイルがなくなっていることを確認します
まとめ
今回はGitの使い方が本当によくわかっていなかったので、とりあえず小出しで色々と操作を試してみてそれを記事にしました
実際に運用する場合の流れについては触れませんでしたが、別で記事を作成しましたので下記に載せておきます
コメント