前回までにmemoしたGoogleColabにおけるGitのBasicOperationについてSummarizeしておきます。GoogleColabをStartするたびに以下のCommandLineをNeed To Run the below code.
I check the log of Git, now.
つぎに、このFolder内に'.ignore.txt'というファイルを作成し、その中身にTextStyleで以下のようにGitの追跡対象からexceptするfolder nameをinput
I run '!git add.', so the massege of untracked file was vanishing.
これで'20251027_IgnoreTest'というFolderがGitの管理対象からexceptされたのかどうか、よくわかりませんが、とりあえず、次のStrudyに進みます。
次はBranchです。
いったんここまでのReviceをThirdCommitとしてCommitしておきます。
SapuさんのInstractをFollowして、まず、now controled folder'Colab_Git_Project'をBranchします。Branch nameは’feature/branch_test’にします。
Outputには、新しいブランチ’feature/branch_test’にSwitchした!とあります。
このあたりからがGitのCultureになってくると感じるのですが、いまGitでControlしているFolder’Colab_Git_Project’に’20251027_GitTest01.ipynb’と‘20251027_GitTest02.ipynb’をCreat(Transfer)したあと、’20251027_GitTest01.ipynb’だけをCommit予約にAddして、さらにCommitします。
At this status, '20251027_GitTest02.ipynb' is recongnaized as untracked file.
Like this, '20251027_GitTest01.ipynb'がCommitされました。
Now, let's move to the main branch from 'feature/branch_test'.
Main branchにReturnしてgit statusしても表示は一緒になりました。う~ん、まだよく理解できません。GitのFunctionからThinkすると、mainでは'20251027_GitTest02.ipynb' はNotRecognizedのはずです。
しかし、GoogleColabでは、Sapu先生のYouTubeのようにFileExplorerをUseしてmainとFeature/branch_testの差分や違いを確認することができません。そこで、MasterGemini
にAskです。
Q.GoogleColabでmainとbranchにそれぞれ含まれているフォルダやファイルを確認する方法ってありますか
A.Google ColabでGitブランチ(mainとその他のブランチ)に含まれているファイルやフォルダを確認する最も一般的な方法は、シェルコマンド(行頭に**!**を付ける)を使用して、実際にブランチを切り替えてからファイル一覧を表示することです。
ここでは、確認したいブランチ名を仮に**feature-branch**として説明します。
1. ブランチを切り替えてファイル一覧を確認する方法
この方法が最も直感的で、そのブランチに切り替えたときに作業ディレクトリがどうなるかを確認できます。
ステップ 1: mainブランチのファイルを確認
まず、mainブランチに切り替えて、ファイル一覧を表示します。
ステップ 2: feature-branchのファイルを確認
次に、確認したい別のブランチに切り替えて、同じようにファイル一覧を表示します。
2. ブランチを切り替えずに内容を比較・確認する方法
現在の作業ブランチ(ワーキングディレクトリ)を変更せずに、特定のブランチに含まれるファイルツリーを確認したい場合は、git ls-treeコマンドを使います。
git ls-treeでブランチのルートを確認
git ls-treeコマンドは、ブランチのコミットID(またはブランチ名)を指定することで、そのブランチのルートディレクトリに含まれるファイルやフォルダ(サブツリー)を一覧表示します。
| コマンド | 特徴 |
!git switch [ブランチ名] + !ls -F | 最も簡単。ブランチを切り替えるため、作業ディレクトリ全体がそのブランチの状態になります。 |
!git ls-tree --name-only [ブランチ名] | ブランチを切り替えない。現在の作業状態を保持したまま、ブランチの内容を確認したい場合に便利です。 |
補足: 両ブランチの差分のみを確認する方法
どちらのブランチに、どのようなファイルが追加・削除・変更されているか、差分だけを確認したい場合は、git diffコマンドが便利です。
例えばOn branch main、ようは自分がmainにいる状態で!ls -fをorderするとbecome like this.
これを踏まえつつ、feature/branch_testにbranchを移動して、もう一度!ls -fをorderすると、become like below.
確かにmainとfeature/branch_testをcompareすると、少なくとも20251027_GitTest01.ipynbがmainには存在せず、後者には存在するという違いがあります。
I don't understand how this happened. So, I want to try various challenge.
'feature/branch_test'にある'20251027_GitTest02.jpynb'を修正してみます。
!git statusをrunすると、the result is almost what I expectedで、modified: 20251027_GitTest02.ipynbというOutputがあります。
In my image, If I commit '20251027_GitTest02.jpynb', then the commitment will effect in only feature/branch_test.
へぇ~~~、こんなふうにfeature/branch_testとmain_branchのそれぞれのCommitHistoryが表示されるんですね。
I want to understand more deeply, I try to revice '20251027_GitTest02.jpynb' on ferture/branch_test at the area enclosed by the skyblue lines below.
After this, I run !git status, output is below.
Changes not staged for commit:となっているので、!git add . and !git statusをrunします。
I commit the feature/branch_test as 'fourth commit'. the result is below.
I comfirm that Git commite this branch.
For now, I transfer to the main branch.
After a while I run it, I seem that the branch swith the main branch.
ここからもとのfeature/git_branch_testに戻れなくなったので、MasterGeminiに質問です。
Q.gitでいまのリポジトリ内に存在するすべてのブランチを確認する方法はありますか?
A.はい、Gitリポジトリ内に存在するすべてのブランチを確認する方法はいくつかあります。目的(ローカルのみか、リモートも含めるか)に応じて、使用するコマンドが変わります。
-----
## 🚀 目的別:ブランチ確認コマンド
| 目的 | コマンド | 内容 |
| :--- | :--- | :--- |
| **ローカルブランチ** の一覧表示 | `git branch` | 現在のローカルリポジトリにあるブランチを表示します。アクティブなブランチには **`*`** が付きます。 |
| **リモートブランチ** の一覧表示 | `git branch -r` | リモートトラッキングブランチ(例: `origin/main`)のみを表示します。 |
| **ローカル** と **リモート** のすべての一覧表示 | `git branch -a` | **すべてのブランチ**(ローカルとリモート)を一覧表示します。 |
### `git branch -a` の実行例
`git branch -a` を実行すると、以下のような形式で出力されます。
```
* main
feature/A
feature/B
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/feature/C
```
* `* main`: **現在アクティブなローカルブランチ**
* `feature/A`, `feature/B`: その他のローカルブランチ
* `remotes/origin/...`: リモートリポジトリ(`origin`)上のブランチ
-----
## 🔎 詳細情報の表示
ブランチの名前だけでなく、各ブランチの最新コミットメッセージやコミットIDなどの詳細を確認したい場合は、**`-v`** オプションを組み合わせます。
| コマンド | 詳細 |
| :--- | :--- |
| `git branch -v` | ローカルブランチと、それぞれのブランチの最新コミットの詳細を表示します。 |
| `git branch -a -v` | ローカルとリモートのすべてのブランチと、それぞれの最新コミットの詳細を一覧表示します。 |
ブランチのリストと、Gitのブランチ操作の基礎を説明している動画はこちらです: [Gitブランチ一覧の確認方法](https://www.youtube.com/watch?v=UKSACvWuvnk)。
http://googleusercontent.com/youtube_content/0
早速、以下のとおりrunしました。
ここで誤って作成してしまったfeature/git_branch_testを以下のCodeでDeleteします。
次に、再びfeature/branch_testに移動します。
!git checkout feature/branch_test
というcommandになるのですが、ここでわたしがうまくGitを使えていないことに気づきました。何が起こるかというと、このCommandをrunすると、以下のmassegeがOupputされます。
Contentは現在のBranch(CurrentBranchはmain)の中にある20251011_Git_andGitHub_Test.jpynbがmodifyされているので、BranchをSwitchする前に、ModifyをCommitしてくださいというErrorです。いま、わたしはGitでcontrolしようとしているFolderの中にこの20251011_Git_andGitHub_Test.jpynbをStorageしたうえで、この20251011_Git_andGitHub_Test.jpynbの中でGitのcommandをRunしています。ということは、!git checkoutや!git status, !git logをRunするたびに、Modifyが起こっており、Switchする前に、GitのCommandを必ずCommitしないといけないという、奇妙なStatusに陥ってしまいました。
おそらく普通ならDevelopingCodeをGitでControlするFolderにStorageしておき、the out of FoldersでGitのCommandをRunするというStyleなのかなぁとThinkしました。
一方で、逆にとても面白いことが起こることもわかりました。
MainBranchをSelectしたStatusで、いまGitでOperatteしているFolder’Colab_Git_Project'のContentsをBrowserのGoogleDriveを確認します。わたしの場合、こんな感じです。
次に、GitでFeature/branch_testに移動したあと、同じようにGoogleDrive on Brauserでもう一度Folder’Colab_Git_Project'を確認すると、次のようにShownです。
Files In the Red Square are increase for main branch., Because they exist in only 'fearture/branch_test' branch.
そのあと、GoogleColabの'20251011_Git_and_GitHub_Test.jpynb'のTabにgo bachすると、Codeの中身が'fearture/barnch_test'でEdit&RunしていたContentsになっていました。
Git is amaging & Ellegant!!!!
ということで、今回の最後はmainとfeature/branch_testのBothSidesでhave ediittedしてきた’20251011_Git_and_GitHub_Test.jpynb'のMergeにChallengeします。 As flowing by now, I think It will occure many conflict absolutely.
やはり、CONFLICTが発生して、Automatic marge failedというMassegeがput out.
ここまでMainBranchとfeature/branch_testの両方に存在しgている’20251011_Git_and_GitHub_Test.jpynb'というfileで別々のGitOperationをしてきたのですから、無数のConflictが発生して、当たり前ですよね。
次のCodeDevelopmentからはGitをUseしてVersionControlしていこうと思っているので、時々「I’m commited at current status by Git!」みたいなMassegeを入れていこうと思います。
By the way, at this time, I finish basically learning to use Git.
コメント
コメントを投稿