Github で Fork して PullRequest を送る

はじめに

Github で Fork して PullRequest を送るということに対して、

日本語があまりに意味不明だったので、まとめてみました。

Forkとは

現存してるオリジナルのリポジトリに影響与えることなく、自分のリポジトリを作れる。

pull request を使ってフォークから上流の(オリジナル)リポジトリに変更を提案できる。

Forkのいいところ

何をしてもオリジナルのレポジトリは汚さないし、壊さない。

おわりに

よくわからないけど、いつか使う時のためのメモでした。

GItHubのQuick Setupをすっ飛ばしてしまってmainブランチが消えた時のメモ

GItHubリポジトリ作成後、

Quick Setupをすっ飛ばしてしまってよくわからなくなり、

git branchをしてもmainブランチが全然出てこなくなりました。

最終的にはリモートからfetchしてorigin/mainとmergeしたら出てきてくれました。

git init

まずはリセット?


git remote add origin https://github.com/リポジトリ名

リモートリポジトリと繋ぐ?


git branch -M main

masterからmainに名前変更


git fetch origin main

ここでリモートリポジトリ(origin)をローカル(main)に持ってくる。


git merge origin/main

これでローカルmainにmergeできた?

git branchをすると無事mainブランチが出てきてくれました。

Learn Git BranchingでGitコマンドの練習

はじめに

learngitbranching.js.org

Learn Git Branchingという無料でGitコマンドを練習できる素晴らしいサイトがあります。

こちらで学習してみて、印象に残っているGitコマンドをメモがわりにまとめました。

よく使ったコマンド (Main編)

git checkout -b bugFix

bugFixブランチを作って、bugFixブランチにcheckoutする。


git branch -f bugFix c2

bugFixブランチをc2に強制移動させる。


git cherry-pick

現在の位置(HEAD)の下に一連のコミットをコピーしたいという意を単純に表す方法。


git commit --amend

直前のコミットを修正する。


git rebase -i 

コミットの順番を変更する


git tag v1 c1

v1というtagをつける。

相対リファレンス

ハッシュでコミットを指定できるが、相対リファレンスという便利な機能もある。

・一つずつ上へ移動させる^(カレット)

・複数回上へ移動させる ~

よく使ったコマンド (Remote編)

git clone

既存のリポジトリをローカル環境に複製する。


git fetch

リモートにあってローカルリポジトリにないコミットをダウンロードする。


git pull
git pull --rebase

リモートの変更を取って(fetch)してマージする。 リモートの変更を取って(fetch)してリベースする。


git rebase side1 side2

side1(親)side2(子)でrebaseする。


git checkout -b side o/main

sideという名前で、o/mainを追跡するブランチを作成して、checkoutする。(激ムズ)


おわりに

最後まで解けなくて答えを見てしまった問題もありましたが、良い勉強になりました。

Gitというものに対して、

「よくわからない」

から

「なんとなくわかった」

に変えてくれた、とてもいいエクササイズでした。

Git初学者の初めてのGit その2

Gitのデータをどうやって管理しているか

Gitは圧縮ファイルをスナップショットで記憶していく。(変更したファイルの差分を記憶する形ではない。)

スナップショットとして記憶することで、バグが起きた時など以前の状態に戻すことが容易である。

ローカルリポジトリは3つのエリアに分かれてる

①ワークツリー(手元の作業場) ここでファイルを変更する。 変更したいファイルだけステージに上げる。(git addコマンド)

②ステージ コミット(スナップショットを記録する)の準備の場所

③ローカルリポジトリ スナップショットとして「圧縮データ」「ツリー」「コミット」ファイルを記録する。(git addコマンド)

ブランチについて

複数人が並行して機能開発するためにあるのがブランチ。

他の人の開発の影響を受けないのがブランチの利点である。

開発、コードを変更(どんどんコミットを重ねる)中で、コミットが枝分かれしていく。

ブランチは枝そのものではなくて、コミットについたタグ(ラベル)であり、コミットIDを指し示すポインタ。

HEADとは今自分が作業中のブランチへのポインタ。

ブランチを利用していく上で、基本的な考え方


masterブランチはリリース用ブランチ

トピック毎ブランチは開発用ブランチ


として進めるのが基本、masterブランチは常にリリースしているものと同じにする。

プルリクエストについて

自分の変更した内容を相手のリポジトリに取り込んでもらえるように依頼する機能

リベースについて

変更を統合する際に、履歴をきれいに整える。

他のブランチでの変更分を自分のブランチに取り込みながら履歴を整えることができる。(fast forward)

git rebase <ブランチ名>

リベースとマージの違い

どちらも枝分かれしたコミットを取り込む動作。

違いは取り込んだ履歴が枝分かれするのか?一直線なのか?の違い。

リベース(作業の履歴を残しときはこっち)

・コンフリクトの解決が比較的複雑になる

・履歴が理解しやすい

マージ(履歴を残さなくてもいい、履歴をきれいにしたのはこっち)

・コンフリクトの解決が比較的簡単

・履歴が複雑化しやすい

注意:GitHubにプッシュしたコミットをリベースしてはいけない。

一つの考え方として、

プッシュしていないローカルの変更には、リベースをする。

プッシュした後は、マージをする。

(コンフリクトしそうならマージ )

スタッシュコマンド(stash:へそくり)とは

今している作業を辞めて、違う作業をしなくてはならなくなった時、

今している作業の変更分を一時避難させることができる。

後で呼び戻すことができる。

Git Hubを使ったリモートリポジトリとのやりとり

git remote add origin <URL>
originというショートカット名で、<URL>のリモートリポジトリを登録する
rmで削除しても、
リモートの情報を詳しく知りたい時
git remote show <リモート名>
git remote show origin
リモートを名を変更
git remote rename <旧リモート名> <新リモート名>
git remote rename old_name new_name
リモートリポジトリとの接続を削除(解除)
git remote rm <リモート名>
git remote rm origin

Git初学者の初めてのGit

はじめに

自分の復習用、メモ用にGitについて学んだことを書いておきます。

Gitとは

Gitとは、最も有名で、最も使われているバージョン管理システムです。

Gitはリポジトリという単位で、コードをいつ、誰が、どんな意図で編集したかを管理することができます。

Gitでのバージョン管理の流れ

まずは、git add .というコマンドを叩いて、stagingエリアに変更分を追加

stagingエリアというのは、リポジトリに変更分を保存する前に、今回の変更分が正しいかチェックする場

stagingエリアにて、変更分が正しい場合は、git commitコマンドにて、変更分をリポジトリに保存

リポジトリに保存しないようにする仕組み

外部に漏れてはいけないファイルをリポジトリで管理すると、閲覧される危険性があります。

ディレクトリをリポジトリに保存しないように

.gitignoreを作成し、その中でファイル名を指定するなどして保存対象外とします。

branchとは

main branchは大元のbranchで、実際に動いているコードそのもの

そのmain branchのコードを編集せず、複数人で開発していくために、branchを切って開発をしていきます。

また、HEADという概念があり、HEADは自分が作業している場所を示すポインタになります。

mergeとrebase(branchの統合)

mergeは、時系列順に両ブランチのコミットをまとめる。

rebaseは、岐元ブランチのコミット履歴 → 分岐先ブランチのコミット履歴の順に並べる。

Gitコマンドまとめ

コマンド 内容
git status 変更のあったファイルを確認
git diff リモートとローカルのファイルの差分を抽出する
git log commitの変更履歴をみる
git show 指定したcommitの変更点を見る
git restore 不要な差分をstagingから取り除く
git branch feature1 feature1という名前のbranchを作る
git branch branchの一覧を確認
git switch feature1 作業branch、feature1への切り替え
git stash 変更分を一時保存する
git merge --no-ff feature1 fast-forwardを行わないコミット
git log --oneline --graph --graphオプション、mergeした際の図式を視覚的にみやすく表示
rebase ブランチごとに進んでいる開発を、繋げ直す

おわりに

一通り、触ってみましたが、正直理解できている実感はありません。触らないとすぐに忘れそうです。。。

Gitは今の時代のマストアプリだと思うので、動画なども観て理解を深めていこうと思います。

Linux初学者のLinux超基本コマンドまとめ

Linuxコマンド一覧

cd

Change Directoryの略

移動する

cd ~
ホームディレクトリに移動する

cd desktop
デスクトップに移動する

pwd

Print Working Directoryの略

pwd
/Users/massan

ls

Listの略

今いるディレクトリの中にあるディレクトリとファイルを表示する

ls

mkdir

Make Derectoryの略

ディレクトリを新規作成する(ディレクトリ名は英語にすること)

mkdir [オプション] <ディレクトリ名>

mkdir file1
file1というディレクトリを作成する

rmdir

Remove Derectoryの略

空のディレクトリを削除する

ファイルがあるディレクトリは削除できない

rmdir file1
file1というディレクトリを削除する

cat

Concatnateの略

ファイルの中身を表示する

cat test1.txt
test.txtテキストファイルを表示する

less

ファイルの中身をスクロール表示する

(Catコマンドは画面にそのまま全部表示する)

スクロール時の操作方法

コマンド 内容
スペース、f 1画面下にスクロール
b 1画面上にスクロール
j 1行下にスクロール
k 1行上ににスクロール
q lessコマンド終了
/<文字列> 下方向に向かって検索
?<文字列> 上方向に向かって検索
n 次の検索結果に移動
N 前の検索結果に移動

tail

ファイルの一部の取得

head ファイルの先頭10行を表示

tail ファイルの最終10行を表示

head file1
file1の先頭10行を表示する

tail file1
file1の最終10行を表示する

touch

空のファイルを作成する

(同じ名前のファイルがあったら上書されない、安全!)

touch test.md
test.mdを作成する

rm

Removeの略

ファイル、ディレクトリを削除する(完全削除されてしまうから注意する)

rm test.md
test.mdを削除する

rm -r ディレクトリ
ディレクトリ内のファイルごと削除する
rmだけだとディレクトリ内にファイルがあると削除できない

mv

Moveの略

ファイル名を変更する、ファイルを移動させる

mv file1 file2
file1の名前をfile2に変更する

mv file1 ディレクトリ名
file1をディレクトリ内に移動させる

cp

Copyの略

ファイル、ディレクトリをコピーする

cp file1 file2
file1(コピー元)をfile2(コピー先)としてコピーする

cp file1 ディレクトリ名
file1をディレクトリ内にコピーする

cp -r デレクトリ名 ディレクトリ名 
rmと同じく、-rを入れることによりディレクトリをコピーできる

ln

Linkの略(Windowsでのショートカットのようなもの)

リンクを作成する(基本はハードリンク)

<ハードリンクを作成する>
ln file file_hard
file(元ファイル)のfile_hardという名前のハードリンクを作成する
ハードリンクとは、ファイルの実体に複数の名前をつける
元のファイルを消しても消えない

<シンボリックリンクを作成する>
ln -s file file_symbolic
file(元ファイル)のfile_symbolicという名前のシンボリックリンクを作成する
シンボリックリンクとは、リンク先がファイルの実体
元のファイルを消したら参照できない

find

ファイルを検索する

find <検索ディレクトリ> <検索ファイル名> <アクション>

find ./desktop/ -name test
デスクトップ下にある、名前がtestのファイルを検索する

find ./desktop/ -name '*.html'
デスクトップ下にある、ファイル形式がhtmlのファイルを検索する

パーミッション

Linuxはサーバーなどで複数のユーザーが使用する可能性がある。

安全性を高める為に、パーミッション(権限)をアカウント毎に分けて管理する

記号 内容
r read
w write
x execute
ls -l
をすると、ファイルのパーミッションが表示される
-rw-r--r--@
drwxr-xr-x
-rw-r--r--@

chmod

change modeの略

ファイルやディレクトリのパーミッションを設定する

記号 内容
u 所有者の権限
g グループの権限
o その他ユーザーの権限
a 全ユーザーの権限
+ 権限を追加
- 権限を削除
= 記述した権限にする
chmod [ugoa] [+-= rwx] <ファイル名>
と記入する
chmod u+r file1
所有者に対してfile1の読み込み権限を追加する。

chmod 755 file1
オーナーが7(rwx = 7)
グループが5(r-x = 5)
その他が5(r-x = 5)

アクセス権 数値  説明
--- 0   読み込み書き込み不可
--x 1   実行のみ
-w- 2   書き込みのみ
-wx 3   書き込み実行のみ
r-- 4   読み込みのみ
r-x 5   読み込み実行のみ
rw- 6   読み込み書き込みのみ
rwx 7   読み込み書き込み実行ができる

sudo

Switch User and Doの略

sudo <コマンド>
スーパーユーザーとしてコマンドを実行する

chown

ファイルの所有者を変更する

chown  nobodyuser file1
file1をnobodyuserユーザへ所有者を変更

ps

Process Statusの略

ps [オプション]

ps
実行中のプロセスを表示する

kill

kill
実行中のプロセスを中止する

おわりに

Mac Terminalを触るのが怖かったし、Linuxなんじゃそりゃレベルからの脱却はできました。

Linuxコマンドに慣れる為にも、積極的にTerminalを触っていこうと思います。

vimの基本を理解するためにvimを触ってみる

はじめに

・今後の為にVimを触ってみました。

Vimとはマウスレスでコーディングできるすぎる程のコマンドを備えた非常に強力なエディター。

Vimに慣れたらVimから離れられなくなるらしい...です。

Vimを実行した環境

MacのTerminalからVimtutorで練習を3回

VscodeVimプラグインをインストール

Vscode(Vim)でこの文章(下書き)を書きました。

基本コマンド
操作 Vim
k
j
h
l
x 一文字削除
i インサートモードへ
(インサートモードで)esc ノーマルモード
操作 Vim
:w 上書き保存
:w ファイル名 名前をつけて保存
:q 編集終了
:wq 保存して終了するには

テキストに変更を加える多くのコマンドは

オペレータ(操作)とモーション(移動)からなります。

これらのコマンドを組み合わせます。

操作 Vim
d 削除コマンド
u やり直しコマンド
p 削除したものを貼り付ける
CTRL-G ファイルの行数を確認
y テキストコピー(vでビジュアルモード)
p テキストペースト

モーション(移動)

操作 Vim
w 次の単語の先頭へ
e 単語の最後へ
b 前の単語の先頭へ
0 行頭へ
$ 行末へ
gg ファイルの先頭へ
G ファイルの最終行へ
番号+g 番号の行へ

感想、おわりに

コードをゴリゴリ書いている人なんかは、全てキーボード上でできたら右手の稼働範囲が狭くなって、効率なんかも上がるのではないかと思いした。

文章を書くだけではあまり恩恵を受けられた印象はなかったです。

最後に、

VscodeVimプラグインを入れているので、引き続きVimを使っていきたいと思っています。