- 投稿日:2020-10-12T18:45:19+09:00
【Shell】Gitでリモートのデフォルトブランチを取得する方法
- 普段Gitを用いた開発の際に、shellやCIでデフォルトブランチ名を取得した処理を記述する場合がある。
- ただ、最近諸事情でデフォルト名がmasterからmainへ変更されたため、汎用的に取得する必要がある。
- そのため、Gitソースのリモートデフォルトブランチ名を取得する2つの方法を記録する。
結果
git remote
コマンドを利用した主に2つのやり方は下記。
- 環境に合わせて選択
# awkの場合 # 出力 : master(or main) git remote show origin | awk '/HEAD/ {print $NF}' # grep / cutの場合 # 出力 : master(or main) git remote show origin | grep 'HEAD branch' | cut -d' ' -f5参考
- 投稿日:2020-10-12T13:49:53+09:00
[VScode] git/ GitHub を管理する方法
概要
Visual Studio Code を利用して、git で作業ディレクトリ(ローカルディレクトリ/リモートディレクトリ)を管理する方法についてまとめる。
前提知識
環境
- Visual studio Code 1.47.2
- git 2.17.2 (ユーザー名、メールアドレスなどの初期設定済み)
事前準備
作業フォルダとして事前に「gitVScode」を作成し、「hogehoge.md」 を格納
ローカルディレクトリの管理
git init //フォルダをバージョン管理の対象にする
フォルダに「.git」が作成された
※「.git」は隠しファイルであるため、隠しファイルを表示するように設定
mac の場合、command + shift + .
で表示/非表示の切り替えが可能git add //記録対象の指定
変更がある場合に左側のアイコンに❶といったように表示される
対象ファイルのプラスマーク([Stage Changes])をクリック
複数ファイルを一括でステージさせたい場合は [Changes] の横をホバーすると [+] が出てくる
git commit // 変更点の記録
リモートディレクトリ(GitHub) の管理
GitHub でリポジトリを作成
[Your profile] → [Repositories] → [New] をクリック
[Create a new repository] ページが表示されるので、[Repository name] を入力する。ここでは、ローカルフォルダとあわせて「gitvscode」とする。
設定が完了したら、[Create Repository] をクリックする
画面に表示された [HTTPS] か [SSH] をコピーする
ここでは、GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~を参照し、SSH の設定を行っているgit remote add //ローカルディレクトリを github のリモートディレクトリに紐づける
[・・・] → [Remote] → [Add Remote] をクリック
GitHub でコピーした https/SSH を貼り付けてエンターキー
[Remote name] に「origin」と入力し、エンター
ターミナルで
git remote -v
を入力し、正しく登録できたか確認git push //commit 済みのディレクトリを github に更新
初回は以下のようなメッセージがでる。このメッセージは、新規ブランチなので、リモートに紐づけるブランチ(追跡ブランチ/アップストリームブランチ)がない、というメッセージ。
参照:Git で新規ブランチを切って Push する時に何やら怒られるヤツの回避方法[OK] をクリックした後に追跡ブランチを確認する
git branch -vv
を実行TERMINALgitVScode $ git branch -vv * master 8bd914e [origin/master] add message[Cancel] をクリックして、
git push -u origin master
を実行後、追跡ブランチを確認TERMINALgitVScode $ git push -u origin master Counting objects: 3, done. Writing objects: 100% (3/3), 214 bytes | 214.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/xxxxx/gitvscode.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'. gitVScode $ git branch -vv * master 58b5df5 [origin/master] add message
git push -u origin master
を実行した時と、追跡ブランチが同様に設定されていることが確認できたので、初回に表示されるメッセージは [OK] を選択して問題ないことがわかった。git pull // ローカルリポジトリに最新版を適用
github 上で変更した場合は pull コマンドを利用して、ローカルリポジトリも更新する
VScode では利用しないコマンド
git status //ステータスの表示
[Changes] 以下にファイル名が並んでおり、ファイルの追加、編集、削除を行うと自動的に
U
,M
,D
がファイル名の横に記載される
ステータスの表示にあたる画面git log // ログの表示
デフォルトでは git log に替わる UI がないため、ログを見やすく表示することができるアドインツール(Git History)をインストールする必要がある
[Git : View History (git log)] アイコンが表示される。クリックするとログが表示される。
参照
- 投稿日:2020-10-12T10:49:36+09:00
不要なリモートブランチ削除
覚書です
※"GitFlow"の場合であればプルリク→マージし、Github/GitLab側でブランチ削除するので不要です。プルリクでの開発現場でない際に使いました。参考になれば幸いです。
間違っている点がありましたらご指摘ください!![手順]
リモートブランチ削除
⇅
ローカルブランチ削除どちらが先でも良いですが、自分のわかりやすい手順で行ってください。
もし誤って他人のリモートブランチを削除した場合は、削除してしまったブランチの人に伝えてください!
ローカルのブランチ情報が残っているので問題ありませんがびっくりすることでしょう...リモートブランチの削除
git push --delete origin ブランチ名もしくは
git push origin :ブランチ名例)
git push --delete origin feature/#0001
最初は
--delete
をつけて削除するのがおすすめです。
理由として、コードやオプションが間違っていたら削除できないため、ブランチの誤削除防止になります。ローカルブランチの削除
git branch --delete ローカルブランチ名もしくは
git branch -d ローカルブランチ名あるいは
git branch -D ローカルブランチ名<<注意>>
-D
は、マージしていないブランチも削除できますのでご注意ください!他人がリモートブランチを削除した時の対応
git fetch --pruneもしくは
git fetch -pGitはローカルの".git/"にデータを格納しています。
git fetch
で追加されたリモートブランチの情報取得はできますが、デフォルトで削除は対応していません。
ですので、--prune
で削除していきましょう。
いちいち打ちたくない人は、configを修正してください。参考文献の一つ目URLにあります。参考文献
https://qiita.com/yuu_ta/items/519ea47ac2c1ded032d9
https://qiita.com/hogeta_/items/33d2334c9b1919bd5120
- 投稿日:2020-10-12T00:56:06+09:00
Git コミットを一部削除する方法
GitHubでコミットを一部のみ削除する方法
結論
ターミナルgit reset <コミットID>コミットID?????
commit IDの出し方
ターミナルgit loggit logでブワーッと下記のようになる
上記のcommit 5daf90338461・・・の5から5までのランダムな英数字混合がコミットIDです!
削除したい該当のコミットのIDをresetすれば・・・
ターミナルgit reset 5daf90338461ead0665b16bf02f9fbfafbba7da5特定のコミットだけが削除された状態になります
注意点としてはこの方法はコミットしてpushする前の状態の説明なのでpushしてしまった後の削除法につきましては以下の記事などを参考にしてみて下さい!
参考Qiita記事
@Maeda-Shoota
~Git困ったぞこれ集~
https://qiita.com/Maeda-Shoota/items/56d5fddccf5e89bbeba0
- 投稿日:2020-10-12T00:50:40+09:00
あんまりターミナル好きじゃない人がGitHub CLIでどう快適になるのか検証してみた
gitの操作はSourcetreeで行うぐらい、そんなにターミナル好きじゃない自分がGitHub CLIを使ってみたら、何が快適になったか、快適にならなったのか紹介します。
v1.1.0の情報です。
実際に使ってみて
もともとめんどくさかったこと
- マイクロサービスで開発していて、チーム全員がほぼ全てのリポジトリをいじるスタイルなので、めっちゃいっぱいリポジトリをいじらないといけない
- 開発した内容によっては、複数のリポジトリにわたる変更があるので、プルリクをいっぱい作らないといけない
- GitFeatureFlowを採用してるので、プルリクを作る時にmaster向けのプルリクと環境ごとのプルリクを作る必要がある
- 大きな変更をした場合、作るプルリクが10を超えることもよくある
- どのリポジトリのどのプルリクがどんな状態なのか把握しづらい
何が快適になったの?
- リポジトリのページを開くのが楽になった
- もともとブラウザで新しいタブ作ってurl入力してた
gh repo view --web
ってやるだけでブラウザで開いてくれる(aliasはったらもっと短くなる)- プルリクの作成が楽になった
- もともとブラウザでリポジトリのページを開き、プルリクのタブを開き、「New Pull Request」をクリックして、ブランチを選んでた
gh pr create -w
ってやるだけで上の4ステップを完了した状態でブラウザを開いてくれるので圧倒的に楽になった (aliasはったらもっと短くなる)- GitFeatureFlowにおけるプルリクの作成が楽になった
- GitFeatureFlowは要すると、プルリク作成する時に、環境の数だけプルリクを作成する必要がある<-めちゃめんどくさい
- 詳しくは https://developers.gnavi.co.jp/entry/GitFeatureFlow/koyama
- master向きに作ったブランチと同じタイトルとつけて、そのリンクを詳細にはり、環境名を表すラベルをはるプルリクを作らないといけない
- シェルを書くことになってしまったが(なのでGitHub CLI使わなくてもAPIたたけよって話ですが)、コマンド一発で実行できるようになった。https://github.com/nekoshita/shell-scripts/tree/master/github
何が快適にならなかった?
- やっぱりブラウザでみた方がなんかいろいろ慣れてる
- コマンドラインだけで完結はするのはいいけど、コマンドをいちいち覚えるのもめんどう
- issueもpullRequestもブラウザで検索できるし
- ghコマンドは基本各リポジトリに対する操作なので、複数のリポジトリをいい感じに扱えない
- 全てリポジトリのOPENなプルリクを一括で取得するとかできなかった
- マイクロサービスの場合はやっぱりここをみるしかない https://github.com/pulls
GHEでも使えるの?
業務で使いたい人は、GHE(GitHub Enterprice)の場合もあるかと思います。
GitHub CLIは、GHEのv2.20以降に対応しています。GHEのバージョンの調べ方はこちら
結論
マイクロサービス、かつ、GitFeatureFlowという数多くのプルリクを作成しないといけない現場において、プルリクを作成するコストが圧倒的に下がったので、まあま嬉しい。
かなり限定的な使い方かもしれませんが、これからもGitHub CLIを使います。GitHub CLIについて
GitHub CLIとは?
コマンドラインでGitHubの操作ができるCLIツールです。
https://github.com/cli/cli
たぶんGitHub上でおこなるほぼ全ての操作をコマンドラインで実行できます。
コマンド詳細はこちらの記事にまとまっています。インストール
brew使える場合(それ以外はhttps://github.com/cli/cli#installationをみてください)
brew install gh認証
# GitHubの場合 gh auth login # GHEの場合 gh auth login --hostname <hostname>コマンド補完の設定(やらなくてもいい)
# zshの場合、.zshrcに以下を追記する eval "$(gh completion -s zsh)" # bashの場合、.bashrcに以下を追記する eval "$(gh completion -s bash)"aliasはぜひ使いたい
ghコマンドでaliasの設定ができます
例えば、プルリクをブラウザで作成するためのコマンドを設定する場合# プルリクをブラウザで開くコマンド gh pr create -w # 下のコマンドで `prc` っていうaliasを設定し gh alias set prc 'pr create -w' # 以下のコマンドでプルリクをブラウザで開けるようになる gh prc