- 投稿日:2020-02-26T18:59:57+09:00
ターミナルからプルリクをさっと開く
GitHub CLI の gh pr create を使って、ターミナルからプルリクをさっと開いて効率アップした話です?
今回使用するのは、hubではなく、GitHubの公式ツールとなっている gh - The GitHub CLI toolです。今のところ(2020/02/26現在)まだ Beta版となっていますが、少しずつ使っていこうと思います。
インストール
お馴染みの brew で簡単インストールです ?
console$ brew install github/gh/gh試す
これまでは feature ブランチにて
git add
とgit commit
を済ませたら、該当のリポジトリをブラウザのタブから探したりしてプルリクを作っていましたが、プルリクを作るまでをターミナルでやっちゃいます。console$ gh pr create -wこれで、
git add
、git commit
の流れでぱっとブラウザ上にプルリクエストが作成されたものが立ち上がります?✨エイリアスにして更に時短
試してみて感動しましたが、このコマンド自体を忘れてしまうのでまた調べてたら意味がない...ということで、エイリアスにします。
bash なら.bash_profile
などに追加してみて下さい!.bash_profilealias pr="gh pr create -w"これで、
pr
と打つだけでプルリクが開いてくれるので快適になりました?オマケ: bash_profile の簡単な書き方
私は以前、
.bash_profile
の開き方すら分からず、vim での書き方も分からなかったので、私的に一番簡単だと思う方法を載せておきます?♀️ホームディレクトリで
console$ open .bash_profileそんなファイルないよと言われたら作ってあげてから開く
console$ touch .bash_profile $ open .bash_profileエイリアスを書いたら、ターミナル再起動か、
.bash_profile
を読み込んであげるconsole$ source ~/.bash_profileさっとプルリク、楽ちんなのでみんなも是非してみて下さい✌️
- 投稿日:2020-02-26T18:19:38+09:00
Gitでピカチュウを死守しろ
はじめに
TECH::EXPERTというプログラミング教室に通っている添野と申します。
この記事は「GitやGitHubがよく分からん」というひと向けの記事です。Gitとは
「ギット」です。私はずっと「ジット」と読んでいましたが、ギットです。
Gitの学習は大切です。なぜ大切かというと、
勉強しないとチーム開発の際に他メンバーに確実に迷惑をかけまくるからです。
つまり、人間関係がギットギトになります。ギットだけに・・・w茶番はさておき、本題です。
プログラミングはポケモン
皆さん、ポケモンはやったことあるでしょうか。
やったことない方向けに簡単に説明すると、ポケモンという可愛い動物を捕まえて育てるゲームです。
育てる方法は結構残酷で、野生のポケモンや他人のポケモンをボコボコにして経験を積みます。我々が今学んでいる「プログラミング」もポケモンの育成に近いところがあります。
rails new
で捕まえたポケモンに愛情を注ぎながらdef index
などの技を覚えさせるわけです。
ポケモンと違うのは、トレーナーである私たちがボコボコにされる点です。Gitは「ポケモン預け屋」
ポケモンの世界には「預け屋」というお店があり、預けたポケモンを適当に育ててくれます。
Gitはプログラミングにおける「預け屋」です。そして、ポケモンの「預け家」との最大の違いは預けたポケモンを育てるのが別の人間である点です。
なぜGitを使うの?
育成が楽になるからです。ピカチュウの育成は超大変です。
レベル999までレベルアップ可能なピカチュウをレベル130にするのがプログラミングです。
そして、レベル130になったピカチュウをお客さんに提出したら
「あと1日で70レベ上げて」みたいなことを言われます。これを楽にするために下記のように分業したとします。
・Aさん ピカチュウの毛並みを整える 「フロントエンド」
・Bさん 10万ボルトを覚えさせる 「バックエンド」
・Cさん ボルテッカーを覚えさせる 「バックエンド」
・Dさん ピカチュウに木の実やタウリンをあげる 「インフラ」みたいな感じです。
ポケモンのピカチュウは可愛いので、全部やりたいと思うかもですが、
実際には罵詈雑言(エラー)を吐きつけてくるピカチュウを育てます。分業でも大変
例えば「10万ボルトを覚えさせる作業」は下記のような手順になります。
- ピカチュウに電気を空気中から集める方法を教える
- ピカチュウに電気を蓄えさせる方法を教える
- 体に蓄えた電気を体外に放出する方法を教える
- 体から発した電気を敵に目掛けて放出させる方法を教える
しかし、この作業を終えた後に
「体内の電気を増幅させる方法を教える」のを忘れた!これじゃ2ボルトしか打てない!
とかなったとします。こうなると
「また新しいピカチュウを捕まえる」
「今いるピカチュウにどうにか2ボルトを忘れてもらって10万ボルトを教え直す」
などという非常に面倒な手順を踏まなきゃいけません。ところがどっこい!
ここでGit様の降臨です。
Gitを使えば、先ほどの1~4の作業の履歴が残ります。つまりセーブデータです。
つまり、3の直前のセーブデータに戻り、電気を増幅させてから、3~4の方法を教え直せます。そうこうしている間に、残りの育成をAさんたちが同時にやってくれている、みたいな感じです。
みんなの育てたピカチュウを最終的に合体させてつよつよピカチュウを爆誕させます。ライチュウにはさせない
Gitには他にもいいところがいっぱいあります。
例えば、みんなで「強くて可愛いピカチュウ」を作ろうとしていたのに、
突然Dさんが「俺はライチュウがいい」とか言い出して突然ピカチュウを進化させてしまったとします。dropboxとか他のクラウドサービスではもうライチュウでいくしかないのですが、
Gitなら「セーブデータ」が残っているので、Dさんの暴挙を却下してピカチュウに戻すことができます。情報分野ではこれが簡単に起きてしまうので、これを防げるのがGitのいいところです。
以上がGitの大まかな説明になります。
これ以降はGitの学習で頻出する概念を説明していきます。GitHub
GitとGitHubは違います。
Git →預かり屋の仕組みそのもの
GitHub → 預かり屋のWebサービス版という感じです。GitHub以外にもいろんなサービスがありますが、
預かり屋の仕組みそのものはGitだけです。GitHub Desktop
ターミナルから
git add .
git commit
みたいな呪文を唱えるやつを、
ボタンをぽちぽちクリックするだけで簡単に使えるようにしたソフトです。リポジトリ
ピカチュウのセーブデータがいっぱい入ってるメモリーカードです。
ローカルリポジトリ
自分のPCに入ってるメモリーカードです。
リモートリポジトリ
自分のPCに入ってなくて外部のサーバーにあるメモリーカードです。
※サーバー = 画面のない、世界のどっかにある誰かのでかいPCここにピカチュウをアップロード(コミット・プッシュ)して合体(マージ)させます。
ローカルでライチュウにしちゃっても、ここからまたピカチュウをダウンロードできます。クローン
リモートからピカチュウをダウンロードすることです。
インデックス
自分のピカチュウを一旦置いておく場所です。
git add
するとここに置かれます。GitHub Desktopだと変更次第勝手に置かれる。ここで「ピカチュウでいいよな?」っていう確認をします。
ピカチュウ以外にもルージュラのレベルを上げたなら「ルージュラも置いとくか」ということも可能。
逆に「ルージュラはレベル上げたけどいらね」と思ったら除外することも可能です。上記をやるメリットは「コミットがゴチャゴチャしなくて済むこと」です。
ピカチュウとルージュラの育成を分けてセーブしておけば、
あとで見たときに「これはピカチュウのセーブデータだな」とひと目で分かります。コミット
インデックスにおいたピカチュウをリポジトリ(メモリーカード)に記録する操作です。
つまりセーブ。ポケモンでいうと「レポート」です。こまめにやりましょう。適当にやってると、トラブルが起きた時にどのセーブデータかわからなくなったり、
そもそも戻りたいセーブポイントに戻れなくなります。この作業はローカルで行われます。
コミットメッセージ
セーブデータに「これはピカチュウのセーブデータだよ」と書く機能です。
ちゃんと書かないとコミットを細かく分ける意味がなくなります。プッシュ
コミットしたセーブデータをローカルからリモートにアップロードすることです。
やらないとGitを使う意味があまりないので、ちゃんとやりましょう。ブランチ
ピカチュウ本体から育成用のピカチュウの分身Aを作る作業です。
マスターブランチというのがピカチュウ本体で、そこから分身A,B,C...を生成して
それぞれ技を教えたり、毛並みを揃えたりする感じです。プル
リモートからローカルにデータをダウンロードすることです。
他の作業者がピカチュウをアップロードした時とか、自分でマージした後に必ずやります。マージ
ピカチュウ本体にピカチュウの分身を融合させる作業です。
ピカチュウの分身Aから作ったピカチュウの分身Bを、ピカチュウの分身Aに融合させるのもこれです。プルリクエスト
マージする前に「このピカチュウでいいよな?」と他の人に確認してもらいたい時に、
確認してもらったりコメントをもらえる機能です。LGTM
プルリクエストで「そのピカチュウ最高じゃん!合体させてオッケー!」って承認するコメントです。
Looks good to meの略らしい。デプロイ
ピカチュウをモンスターボールから出してバトルの舞台に置くこと。
「いけっ!ピカチュウ!」コンクリフト
AさんとBさんが二人ともピカチュウの分身Aを育ててしまった状態。
Aさんはすでにピカチュウ本体に合体させてしまっており、Bさんの育成した分どうしようっていう状態。.gitignore
ピカチュウをGitの束縛から開放するために、開放先を指定するためのファイル。
/log/*
.gitignoreに書ける呪文の一種。
ここに「ピカチュウ 俺のとなり」って書くとマサラタウンのサトシになる。まとめ
以上がGitについての説明になります。
結論を1行で書くなら「Gitを使うとプログラミングが圧倒的に楽になる」です。
はじめは難解に感じてメリットをあまり感じないかもですが、大規模な設計になるほど必要になるので、
必ず使いこなしていきましょう。くれぐれも、ピカチュウをライチュウにしないように。他にもプログラミング学習の役に立つ記事を書いていますので、是非ご活用ください。
おすすめ記事
【Rails男子必見】エラー系女子との会話が弾む3つのテクニック【モテたい】
Railsは"5つの属性"を意識しろそれでは。
- 投稿日:2020-02-26T06:26:10+09:00
Gitの内部の動きを知ろう ~その4~
目次
今回の確認内容
ブランチを作ってチェックアウトします。
git branch
以下のコマンドを実行し、最新のコミットからブランチを作ります。
$ git branch * master $ git branch bra20200226 $ git branch bra20200226 * masterチェックアウトはしていないので、まだMasterを参照しています。このときに.git配下がどのように変わったかを見てみます。
$ tree -a ├── .git │ ├── logs │ │ ├── HEAD │ │ └── refs │ │ └── heads │ │ ├── bra20200226 │ └── refs │ ├── heads │ │ ├── bra20200226logsとrefs配下にブランチが作られました。作られたファイルの中身を見てみると、以下のように最新のコミットから作られたことがわかります。
$ cat .git/logs/refs/heads/bra20200226 0000000000000000000000000000000000000000 2deb1b0751cbfeffdc75683b2f61e476ef970640 Chapa <hoge@hoge.com> 1582664128 +0900 branch: Created from master $ cat .git/refs/heads/bra20200226 2deb1b0751cbfeffdc75683b2f61e476ef970640 $ git cat-file -p 2deb1b0751cbfeffdc75683b2f61e476ef970640 tree e6c5d9e73c33771f1878aa6edc1a5df1939e6351 parent 17e88b45fdb1b3e8831df0c209204f290d6ca614 author Chapa <hoge@hoge.com> 1581171878 +0900 committer Chapa <hoge@hoge.com> 1581171878 +0900 2nd commit. add and modifygit checkout
では、チェックアウトして、.git配下がどのように変わったかを見てみます。
$ git checkout bra20200226 Switched to branch 'bra20200226' $ git branch * bra20200226 master├── .git │ ├── HEAD │ ├── index │ ├── logs │ │ ├── HEADそれぞれの中身を見ると以下のようになっています。
$ cat .git/HEAD ref: refs/heads/bra20200226 $ cat .git/refs/heads/bra20200226 2deb1b0751cbfeffdc75683b2f61e476ef970640 $ cat .git/logs/HEAD 0000000000000000000000000000000000000000 17e88b45fdb1b3e8831df0c209204f290d6ca614 Chapa <hoge@hoge.com> 1580696403 +0900 commit (initial): first commit 17e88b45fdb1b3e8831df0c209204f290d6ca614 2deb1b0751cbfeffdc75683b2f61e476ef970640 Chapa <hoge@hoge.com> 1581171878 +0900 commit: 2nd commit. add and modify 2deb1b0751cbfeffdc75683b2f61e476ef970640 2deb1b0751cbfeffdc75683b2f61e476ef970640 Chapa <hoge@hoge.com> 1582664726 +0900 checkout: moving from master to bra20200226HEADの参照ブランチが変わりました。参照ディレクトリを見るとどのコミットを参照しているかがわかります。
今回のおさらい
ブランチを作るとオブジェクトとして何かが作られるわけではなく、参照ディレクトリ配下にファイルが作られていきました。チェックアウトすることでHEADの参照先が変わることも確認できました。
次回はブランチでコミットを進めたときにどのように変化していくかを追っていきたいと思います。
- 投稿日:2020-02-26T05:38:25+09:00
pullとは(簡易)
- 投稿日:2020-02-26T01:09:31+09:00
覚えておきたいgitコマンド
gitのコマンドですぐ忘れてしまう、でも使いたくなるコマンドをまとめました。
マージ済みローカルブランチの一括削除
既にmaster/developにマージされているローカルブランチを一括で削除するコマンド
$ git branch --merged|egrep -v '\*|develop|master'|xargs git branch -d消したリモートブランチを完全に消す
リモート上で消したはずが、fetchしてもローカルに残っているブランチを完全に消すコマンド
$ git fetch --prune直前のコミットを無かったことにする
直前のコミットの歴史を完全に消す
$ git reset --hard HEAD^特定のコミットまでの歴史を完全に消す
$ git reset --hard {コミットID}コミットの内容を打ち消す
直前のコミットの内容を、相殺するコミットをする
$ git revert HEAD
特定のコミットの内容を、相殺するコミットをする
$ git revert {コミットID}強制的にpushする
ローカルの変更をリモートのブランチに強制的にプッシュさせる
$ git push -f origin {ブランチ名}参考文献
この記事は以下の情報を参考にして執筆しました。