Open9

Git / GitHub

Hidden comment
shhetshhet

Git / GitHub

git remote

https://git-scm.com/docs/git-remote

git remote

追跡しているブランチを表示する

$ git remote
origin
hoge

git remote -v

追跡しているブランチとそのURLを表示する

$ git remote -v
origin  https://github.com/name/git_tutorial.git (fetch)
origin  https://github.com/name/git_tutorial.git (push)
hoge  https://github.com/name/git_tutorial.git (fetch)
hoge  https://github.com/name/git_tutorial.git (push)

git remote add

git remote add [名前] [URL] の形式でリポジトリをどんな名前で扱うか定義する

詳細

一旦表示。今はoriginという名前でname/git_tutorialのみ登録していることがわかる

$ git remote -v
origin  https://github.com/name/git_tutorial.git (fetch)
origin  https://github.com/name/git_tutorial.git (push)

今回はrepository_bakというリポジトリを新規作成した。追加とプッシュまで確認する

git remote add bak https://github.com/name/git_tutorial_bak.git

表示してみる

git remote -v
bak  https://github.com/name/git_tutorial_bak.git (fetch)
bak  https://github.com/name/git_tutorial_bak.git (push)
origin  https://github.com/name/git_tutorial.git (fetch)
origin  https://github.com/name/git_tutorial.git (push)

bakという名前でname/repository_bakが登録された

プッシュする

$ git push -u bak main
~~~
 * [new branch]      main -> main
branch 'main' set up to track 'bak/main'.

bakのmainブランチにプッシュできた

Hidden comment
shhetshhet

Git

git switch

https://git-scm.com/docs/git-switch
まだEXPERIMENTALなのでgitバージョンごとに確認すること

$ git branch
  a
* main

$ git switch a
Switched to branch 'a'

$ git branch
* a
  main

mainからaに切り替わった

git switch -

直前のブランチに切り替える

$ git branch
* a
  main

$ git switch -
Switched to branch 'main'

$ git branch
  a
* main

$ git switch -
Switched to branch 'a'

$ git branch
* a
  main

a -> main -> aと切り替わることがわかる

git switch -c

ブランチの作成と切り替えを行う

$ git branch
* a
  main

$ git switch -c b
Switched to a new branch 'b'

$ git branch
  a
* b
  main

git switch --detach

HEAD detached状態に切り替える

$ git branch
  a
* b
  main

$ git switch --detach HEAD^1
HEAD is now at cd91500 Merge pull request #1 from name/repository

$ git branch
* (HEAD detached at commit_ID)
  a
  b
  main

以前のバージョンの内容を確認したいときなどに使う
https://git-scm.com/docs/git-checkout#_detached_head

mainに戻す

$ git switch main

$ git branch
  a
  b
* main

以上です

shhetshhet

Git / GitHub

プルリクエストの流れ

リモートリポジトリの追加は既にされているという状況

$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

プルリクエストは以下の流れに沿って行われる

  1. mainブランチを最新に更新する
  2. ブランチを切る
  3. ファイルを変更
  4. コミット・プッシュをする
  5. プルリクエストを送る

1. mainブランチを最新に更新する

$ git fetch
$ git merge origin/main
Already up to date.

2. ブランチを切る

$ git switch -c pull_request
Switched to a new branch 'pull_request'

3. ファイルを変更

ファイル作成の想定

$ echo pull_request test>>req.txt

4. コミット・プッシュをする

$ git add req.txt
$ git commit
$ git push origin pull_request
~~~
To https://github.com/name/repository_name
 * [new branch]      pull_request -> pull_request

5. プルリクエストを送る

対象のリポジトリのページにてPull requestsを選択

New pull requestを選択

compair: mainとなっているところを選択、4でプッシュしたブランチを選択

画面が切り替わる↓

Create pull requestを選択

タイトルと詳細を記載する
Reviewersからユーザーを選択するとレビュー依頼が出せる
Create pull requestを選択

以上です

shhetshhet

Git

git init 時のデフォルトブランチ名をmainに変更する

git config --global init.defaultBranch main
shhetshhet

git stash

作業ディレクトリとインデックスの状態を一時的に記録し、作業ディレクトリをHEADコミットに合わせて元に戻す
作業中に割り込みなどが発生し、現在までの変更内容がコミットするまでに至らなかった場合などに一時退避するような使い方をする

git stash

変更されたファイルをスタックに格納する

1. 現在の状態
$ git status
On branch main
nothing to commit, working tree clean
2. ファイルに変更を加え、状態を確認する
$ git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed) 
  (use "git restore <file>..." to discard changes in working 
directory)
        modified:   _scrap/git_github/stash.md

no changes added to commit (use "git add" and/or "git commit 
-a")
3. 作業を隠す
$ git stash
Saved working directory and index state WIP on main: 1094ea1 
add test
4. 隠したあとの状態の確認

作業ディレクトリの状態がきれいになっている

$ git status
On branch main
nothing to commit, working tree clean

git stash list

隠したファイルの一覧を取得する

$ git stash list
stash@{0}: WIP on main: 1094ea1 add test

git stash apply

隠したファイルの復元を行う
git stash applyをそのまま使うと最新を復元する
git stash apply [スタッシュ名]とすると指定したスタッシュを復元

1. 状態の確認
$ git status
On branch main
nothing to commit, working tree clean
2. 復元

git statusしたときと同じ表示がされる

$ git stash apply
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed) 
  (use "git restore <file>..." to discard changes in working 
directory)
        modified:   _scrap/git_github/stash.md

no changes added to commit (use "git add" and/or "git commit 
-a")

git stash apply [スタッシュ名]

スタッシュ名を指定すると特定のスタッシュを復元する

1. 状態の確認
$ git status
On branch main
nothing to commit, working tree clean
2. スタッシュの確認
$ git stash list
stash@{0}: WIP on main: 1094ea1 add test
stash@{1}: WIP on main: 1094ea1 add test
3. スタッシュの復元(名前指定)
$ git stash apply stash@{1}
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed) 
  (use "git restore <file>..." to discard changes in working 
directory)
        modified:   stash.md

no changes added to commit (use "git add" and/or "git commit 
-a")

なお、ステージの状態も復元したい場合は git stash apply --indexとする

Hidden comment
shhetshhet

Gitの追跡対象から外す

$ git ls-files
.gitignore
README.md
_scrap/git_github/stash.md
_scrap/not_tracked/not_traked_file
articles/.keep
articles/09b55b4eb177a3.md
books/.keep
package-lock.json
package.json

git ls-filesはGitで追跡中のファイルを表示する
今回は_scrap/not_tracked/not_traked_fileにおけるnot_tracked_fileを追跡から外し、not_trackedを以降の追跡対象外とする

  1. ファイルもしくはディレクトリ内のファイルをunstageにする

ファイルのとき

$ git rm _scrap/not_tracked/not_traked_file 
rm '_scrap/not_tracked/not_traked_file'
$ git ls-files
.gitignore
README.md
_scrap/git_github/stash.md
articles/.keep
articles/09b55b4eb177a3.md
books/.keep
package-lock.json
package.json

_scrap/not_tracked/not_traked_fileが追跡対象から外れた(unstaged)

ディレクトリのとき(-Rオプションを付けるだけ)

$ git rm --cached -r _scrap/not_tracked
rm '_scrap/not_tracked/not_traked_file'
$ git ls-files
.gitignore
README.md
_scrap/git_github/stash.md
articles/.keep
articles/09b55b4eb177a3.md
books/.keep
package-lock.json
package.json
  1. ファイルもしくはディレクトリ内のファイルをuntrackedにする

.gitignoreに追加する
.gitignoreはルートに配置することが多いが、複数のサブディレクトリに配置することもできる