60歳からITエンジニアを目指す無謀なブログ

60歳で定年し、職種を変更してIT技術者を目指すブログです。

Git & GitHubの理解(自分用)

■基本用語、コマンド動作など

  • Repository(リモート/ローカル):用語

   変更内容を記録するデータベース

   *1

  • ワークツリー

   .git で管理されているディレクト

  • リポジトリ作成 git init
  • カレントディレクトリ以下をリカーシブにリポジトリ管理に置くコマンド
    • git add . <- . dot コマンド
  • .gitがあるディレクトリで変更をリポジトリへ登録するコマンド 
    • git commit -m "Update message" 
  • ワークツリーとリポジトリ間の差分チェック(ワークツリーにあるファイルがコミットされているものとどのように異なるのかをチェックするため)
    • git diff  ←これで自動的に差分がファイルと差分内容が出力される
  • [diffの見方]

    git diff upload.js
    diff --git a/upload.js b/upload.js
    index a2ed9d7..861eeca 100755  << -hash , and permission 755
    --- a/upload.js                                    <<- a/ staged file,   
    +++ b/upload.js                                 <<- b/work tree file
    @@ -24,7 +24,7 @@ window.addEventListener('load', () => { <<- from 24 row +7
             const fd = new FormData($('f1'));                                      // row24
             const xhr = new XMLHttpRequest();                                  // row 25

    -        xhr.open("POST", "/test_entry/upload/upload.php");        // row26 削除
    +//        xhr.open("POST", "/test_entry/upload/upload.php"        xhr.open("POST", "upload.php");                                                                             // row27 追加
             // Basic Events
             xhr.addEventListener('load', (evt) => {
                 console.log('** xhr: load');
    @@ -76,7 +76,7 @@ window.addEventListener('load', () => {
                 $('completion').innerHTML = "Successfully uploaded" 
             });                                                                                      //  row 76
             pb(0);                                                                                // row 77
    -        xhr.send(fd);                                                                     // row 78 delete
    +        xhr.send(fd);                                                                    // row 78 add                                                        

■ワークツリー<ーー>ステージ(インデックス)<ーー>リポジトリ  差分検出

1 WT(file変更)  git diff で WTとSTGの差分ありをチェック 差分あり

         git diff --stagedでSTGとRPSの差分をチェックして、差分なし

2 git add file     でfileをSTGに登録

         git diff でWTとSTGの差分が無くなったことが判明

        git diff --staged   STG/RPSにはまだ差分あり

3  git commit -m "message"で変更をリポジトリへ登録

        git diff でWTとSTGの差分が無くなったことから変化なし

        git diff --staged   STG/RPSにも差分が無くなった

 

■ステージにcommitすべきファイルがあるかを確認する方法

   git status

 

■git add, commitしてないワークツリー内ファイルの変更を元に戻す

つまり,リポジトリにある状態に戻す

  git restore file_name

■ステージにあげたものを戻す restore

  git restore --staged file_name   <---この実行後はステージから降りるだけ

再度 git restore file_name <---この実行後にfile_name の修正も元に戻る

■ブランチ操作

元々masterというのが出来ている、'test'というブランチを作るには

git branch test 

git branch  コマンドで

*master

 test

のように表示される

作業ブランチの切り替え 

 git switch 'branch_name'で作業ブランチが切り替わる

注)切り替える度に自動で、ワークツリーの内容がそのブランチのファイル内容に置き換わる

 

作業ブランチに他のブランチの修正内容を取り込む

  git merge branch_name

⭐️コンフリクト

Auto-merging app.py

CONFLICT (content): Merge conflict in app.py

Automatic merge failed; fix conflicts and then commit the resul

 

■Gitの設定ファイルの種類と場所

a) /etc/gitconfig    ----- 全ユーザを管理するsystem管理者なので通常考慮しなくて良い

b) ~/.gitconfig -----ログインユーザ管理対象

           > git config --global  [ENT]で確認可能

c) /Repository/.gitconfig   特定リポジトリ(ワークツリー)環境での管理

                                          > git config --local -l               リスト形式でconfigを表示

個別リポジトリ毎に設定を変更可能

  >git config   --local /--global -e     でエディタ起動し修正可能

注)ローカルに設定がなくとも、グローバルの設定で包含される

 

■間違えて消してしまったファイルの復活

> git status [ENT]  実行時の下記メッセージでtemp.csvが削除されたことが分かる

On branch master

Changes not staged for commit:

  (use "git add/rm <file>..." to update what will be committed)

  (use "git restore <file>..." to discard changes in working directory)

deleted:    temp.csv

 

>git  checkout -f temp.csv[ENT] 実行で index(staging area)から復活

Updated 1 path from the index

 

>git restore temp.csv[ENT] コマンドでも復活させられる

 

 

■既にファイル作成済みのディレクトリを途中からGit管理下に置く方法

*1:リモートリポジトリがGitHub