- 投稿日:2020-09-26T18:23:27+09:00
この行がマージされたプルリクを見たい
最近よくコードリーディングをしているので、GitLensを重宝しています。
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlensコミットIDやコミットメッセージを簡単に見られるので、
「なぜこの変更が行われたのか」を確認することができます。神。ただ、この情報だけでは足りず
「このコミットがマージされたプルリクを見たい」となることがあります。
こうなると、
- GitHubで該当のCommitを開く
https://github.com/[user|org]/[repo]/commit/[commit_id]- プルリクへのリンクがあるのでクリック
と確認することになりますが、繰り返していくと面倒になってきます。
そこで、シェルを作りました。git-open-pr#!/bin/bash -eu DEFAULT_BRANCH=$(git remote show origin | grep "HEAD branch" | sed "s/.*: //") COMMIT_ID=$(grep -Fxf \ <(git log --first-parent --merges --pretty=format:%H $DEFAULT_BRANCH; echo) \ <(git log --ancestry-path --merges --pretty=format:%H $1..$DEFAULT_BRANCH; echo) \ | tail -n 1) COMMIT_MSG=$(git log $COMMIT_ID -n1 --pretty=format:%s) PR_NO=$(echo $COMMIT_MSG | egrep --only-matching '#\d+') GIT_URL=$(git remote get-url origin) REPO_PATH=${GIT_URL#git@github.com:} REPO_SIGN=${REPO_PATH%.git} open "https://github.com/$REPO_SIGN/pull/${PR_NO#\#}"使い方
- 上記のシェルを
git-open-pr
とか名付けてchmod 744 git-open-pr
(実行権限を付与)- PATHが通っている場所においてください
(私は自作シェル置き場($HOME/bin
など)を作って、
.bash_profile
や.zshrc
にexport PATH=PATH:$HOME/bin
と書いてあります)- 該当のレポジトリでCommit IDを指定して実行
$ git-open-pr xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GitHubのプルリクページが一発で開きます
前提
- 多分Macでしか動作しません
- GitHubで「Create a Merge Commit」でマージされたプルリクでないと開けません
- マージコミットのsubjectが
Merge pull request #100 from branch_name
の形式になっていることを利用しています動作確認環境
% sw_vers -productVersion 10.15.6 # Catalina % xcode-select --version xcode-select version 2373. % git --version git version 2.28.0きもち
vscode拡張とか作ってvscode上で完結したいな...
参考
https://ja.stackoverflow.com/questions/12852/特定のコミットに対して-それが対象のブランチへ-どのマージコミットでマージされたかを判定するには
https://git-scm.com/docs/pretty-formats
- 投稿日:2020-09-26T15:20:56+09:00
初めてのGitコマンド一覧【初心者向け】
エンジニア4ヶ月目のtomoakiです。
実務でよく使っているGitコマンドについて、備忘録も兼ねてまとめていきます。現場に入りたてのエンジニアがよく使うコマンドを中心に記載しているので、過不足あると思いますがご容赦ください。m(_ _)m
適宜、追加していく予定です。git init
gitプロジェクトを新規作成します。
作成したいディレクトリに移動してからgit init
コマンドを叩いてください。$ git init Initialized empty Git repository in <ディレクトリ名>/.git/git clone
指定したリポジトリ名のプロジェクトを、指定したディレクトリにコピーします。
$ git clone <リポジトリ名> <ディレクトリ名> Cloning into '<ディレクトリ名>'... remote: Enumerating objects: 190, done. remote: Counting objects: 100% (190/190), done. remote: Compressing objects: 100% (128/128), done. remote: Total 190 (delta 53), reused 172 (delta 38), pack-reused 0 Receiving objects: 100% (190/190), 70.62 KiB | 420.00 KiB/s, done. Resolving deltas: 100% (53/53), done.git status
ワーキングツリー、ステージングエリアの状況を確認します。
変更したファイルや新規追加したファイルがステージングエリアにある場合は以下のように表示されます。$ git status On branch <ブランチ名> 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: <変更したファイル名> Untracked files: (use "git add <file>..." to include in what will be committed) <新規作成したファイル名>ステージングエリアに追加したファイルがある場合は、以下のように表示されます。
$ git status On branch <ブランチ名> Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: <ステージングエリアに追加したファイル名>git add
ワーキングツリーで編集したファイルをステージングエリアにアップします。
# ファイル名を指定して追加する場合 $ git add <ファイル名> # ステージングエリアの全てのファイルを追加する場合(.は全てのファイルを意味します) $ git add . # 編集したファイルの一部を追加する場合 $ git add -p
-pオプション
をつけて実行すると、以下が表示されます。
表示された箇所を追加する場合は「y」
、追加しない場合は「n」
、さらに細かく指定する場合は「s」
を入力します。(1/1) Stage this hunk [y,n,q,a,d,s,e,?]?
-pオプション
は、便利なので覚えておくと何かと役に立ちます。git commit
ステージングエリアに上がっているファイルをローカルリポジトリにコミットします。
-mオプション
で、コミットメッセージを追加できます。$ git commit -m "<コミットメッセージ>" [master aa1db46] <コミットメッセージ> 8 files changed, 67 insertions(+), 21 deletions(-) create mode 100644 <コミットしたファイル名>git commit --amend
コミットメッセージを修正したい場合は、
git commit --amend
コマンドが使えます。
開いたvimエディタで直接コミットメッセージを編集できます。なお、git commit --amendで修正して良いのは、git pushする前のコミットのみです。
git push後だとコンフリクトが発生するので、注意してください。$ git commit --amend ↓↓ vimエディタが開き、コミットメッセージを編集できる <コミットメッセージ> # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Sat Sep 26 14:59:19 2020 +0900 # # On branch master # Changes to be committed: # modified: <コミットしたファイル名>git push
ローカルリポジトリにコミットしたファイルをリモートリポジトリにプッシュします。
git push
コマンドを実行する前に、git remote add
コマンドでリモートリポジトリを登録しておいてください。$ git push <リモートリポジトリ名> <リモートブランチ名> Enumerating objects: 34, done. Counting objects: 100% (34/34), done. Delta compression using up to 8 threads Compressing objects: 100% (17/17), done. Writing objects: 100% (18/18), 2.56 KiB | 2.56 MiB/s, done. Total 18 (delta 10), reused 0 (delta 0) remote: Resolving deltas: 100% (10/10), completed with 9 local objects. To <リポジトリ名>続く…
- 投稿日:2020-09-26T13:18:03+09:00
Gitで間違えてコミットしたファイルをadd前の状態に戻したい!泣
タイトルの通りです。
先に結論を書いておきます。git reset HEAD^以上です。これで解決です。
ここからは、読まなくても問題ないです。
タイトルだけだとよくわからないという方は、お読みください。(経緯)
あるブランチで作業していたら、いったん今の作業を退避させて、別の作業をしたいと思い、
意気揚々とgit commit
し、
git stash
しようとおもったのですが、$ git stash No local changes to saveあれ?
あーーー!!そうだ、なぜコミットしてしまったんだ、、、泣
(git stash
はコミットしていない変更がある状態で上記のコマンドを実行すると、変更した部分が退避されます。)やばいやばい、ここは
git revert HEAD
か?
いや、それだとこれまでに変更した作業が消えてしまう、、、、このまま作業するしかないのか、というときに、やっぱりありました。
(まあそりゃありますよね)対処前のコミット履歴$ git log --pretty=oneline | awk '{print $1}' 376980ec2b9005f4a80862da7d0955bd850d9d57 f892d3ceb3632eb38f102ac9d0ed5b587f71a1e3冒頭でも記載した
git reset HEAD^
これで解決です。対処後のコミット履歴$ git log --pretty=oneline | awk '{print $1}' f892d3ceb3632eb38f102ac9d0ed5b587f71a1e3 d34480810741248c1bf8f1d8278f590bc61bc37dはい、一番上のコミットが消えてますね!
そして、変更したファイルもそのままです。add前の状態に戻っています。同じような境遇にあわれた方の参考になれば嬉しいです。
- 投稿日:2020-09-26T11:38:22+09:00
fatal: remote origin already existsのエラーで怒られたとき
リモートリポジトリをローカルリポジトリに紐付けしようとしたら
以下のエラーが!!$ git remote add origin git@github.com:com/ユーザー名/リポジトリ名.git fatal: remote origin already exists.https://www.sejuku.net/blog/71492
こちらのサイトで解決。要は、既に紐付き先があるから浮気しないでくれって感じなのでそれに消えてもらって、再度登録をし直せばいいとのこと。
そこで念のためにどのリポジトリに紐付いてるかを確認するために
git remote -vを入力。
origin git@github.com:~(fetch) origin git@github.com:~(push)↑
すると今の紐付け先が出てくるので、削除するためにgit remote rm originを入力。
そしてもう一度git remote -vを入力して削除されたかの確認。
削除されてたら何も出てきません。そして、
git remote add origin git@github.com:ユーザ名/リポジトリ名.gitを入力して、新しいリポジトリの紐付け完了。
- 投稿日:2020-09-26T11:18:00+09:00
SourceTreeのインストール
要点
- 無料利用可能
- Mac、Windows に対応
- インストールはexe形式のインストーラーを使う(Scoopは使わない)
- 詳細オプションは、有効化しない
SourceTreeとは
バージョン管理システム(GitとMercurial)をGUI操作できる無料ツール。
MacとWindowsに対応している。インストール手順(通常版)
1. インストーラーをダウンロードする
https://www.sourcetreeapp.com/
公式サイトからインストーラーをダウンロードする2. インストーラーを起動する
2.1. Install
ダウンロードしたインストーラーを起動します。
2.2. Registration
Bitcuketのアカウント登録を行えますが、Bitcuketを使わないのであれば「スキップ」で問題ありません。
2.3. ツールをインストール
SourceTreeと同時にインストールしたいバージョン管理システム(GitやMercurial)を選択します。
すでにバージョン管理システムがインストールされている場合は、自動選択された状態で表示されます。
詳細オプション
「詳細オプション」の選択は行わない方が無難です。
改行の自動処理を設定する
取得したテキストの改行コードが全て LF から CRLF 自動変換されます。Windows上のDockerでLinuxを動作させる時など、CRLF が問題を起こす原因となります。
Configure Global Ignore
グローバル無視リストを作って exe、dll、obj のような通常はリポジトリにプッシュしないような拡張子のファイルを無視する設定。この設定はチャックしないで、意図的に拡張子を個別設定した方が無用な混乱を避けられます。
2.4. Preferences
インストール手順(Scoop版)
Scoopを使わずにexe形式のインストーラーでインストールする方が無難です。
SourceTree を Scoop でインストールすること自体は可能ですが、SourceTree から参照しているパスが固定なのでトラブルが発生するようです。Scoopを使用したインストール手順
1. パッケージを検索する
SourceTreeのパッケージが extras バケットに存在することが確認できる。
PowerShellPS C:\> scoop search sourcetree Results from other known buckets... (add them using 'scoop bucket add <name>') 'extras' bucket: bucket/sourcetree2. パッケージを含むバケットを追加する
extras バケットをパッケージのダウンロード元として追加する。
PowerShellPS D:\> scoop bucket add extras Checking repo... ok The extras bucket was added successfully.3. パッケージをインストールする
SourceTreeパッケージをインストールする。
PowerShellPS D:\> scoop install sourcetree Updating Scoop... Updating 'extras' bucket... Installing 'sourcetree' (3.3.9) [64bit] SourceTree-3.3.9-full.nupkg (23.3 MB) [========================================] 100% Checking hash of SourceTree-3.3.9-full.nupkg ... ok. Extracting SourceTree-3.3.9-full.nupkg ... done. Linking ~\scoop\apps\sourcetree\current => ~\scoop\apps\sourcetree\3.3.9 Creating shim for 'sourcetree'. Creating shortcut for Atlassian SourceTree (sourcetree.exe) 'sourcetree' (3.3.9) was installed successfully!
- 投稿日:2020-09-26T10:40:47+09:00
バージョン管理システム
バージョン管理システムについて
大きく分けると2つのバージョン管理システムが存在する。
一つ目はSubVersionやCSVなどの集中型バージョン管理システム
二つ目はGitのような分散型のバージョン管理システム以前では集中型バージョン管理システムが使われていましたが、
源氏ではGitへ移行されており、分散型バージョン管理システムが主流になっています。バージョン管理システムに言えること
チーム開発において生産性の高いか開発環境を提供できる
- 変更履歴が残る為、後でどのような作業を行なっていたか経緯を追うことが可能。
- 同じファイルを複数人が同時に変更ができる。
- タグによってリリースの成果物を管理できる。
- 過去の任意のバージョンまで戻すこと(リバート)ができる
上記で簡単にバージョン管理システムについて説明してきましたが、
筆者は現在GitLabの学習をしていますので、これからはそちら
情報を投稿していこうと思います。
- 投稿日:2020-09-26T01:03:18+09:00
Ruby on RailsにてRails new〜デプロイまでの忘備録1
Ruby on RailsにてRails new〜デプロイまでの忘備録です!
何回かに分けて、Rails newコマンドでアプリケーション作成からデプロイまでの一連をつらつらと書いていきます。
1回目は、Railsアプリケーション雛形作成からリモートリポジトリへpushまで書いていきます。足りない点や間違っている点があったら、教えていただけると嬉しいです。
※Ruby,Rails,GitはPCにインストール済みを想定します。
GitHubもリポジトリの作成等の説明は省きます。環境
開発環境
言語:Ruby 2.5.1
FW:Ruby on Rails 5.2.4
DB:PostgreSQL
test:RSpec
バージョン管理:Git,GitHub環境:MacBookAir
※VirtualBox,Docker等の仮想環境はRailsの基礎を重視するために導入しませんでした。
デプロイ先:heroku
AWSも環境と同じ理由で導入しませんでした。Railsアプリ作成
Rails newコマンドを使ってアプリケーションのディレクトリを作成しましょう!
ターミナル.rails new <App_name> -option実際に私はDBにPostgreSQLを使用したかったので下記のようなコマンドを入力して、最初にアプリケーションに組み込みました。(後でも変更可能です)
ターミナル.rails new App_name -d postgresqlそうするとRailsアプリケーションに必要なディレクトリがスルスル作られます。
作成後、今いるディレクトリから先ほど作成したディレクトリにcdコマンドで移動します。
ターミナル.cd App_nameさて、DBを作成しておきましょう!
ターミナル.rails db:createこれでDBが作成されます。
ターミナル.rails sRailsのサーバーを立ち上げ
http://localhost:3000
にブラウザからアクセス!正しくサーバーが立ち上がったのが確認できましたか?
ちなみに終了はcontrol + c で終了できます。Git管理を始める
Gitを使い始めましょう!
ターミナル.git initこれでGit管理する準備は整いました。
Git関連ディレクトリは、隠しディレクトリとして設定されているので、command + shift + . で可視化しておいてもいいかも知れません作ったアプリケーションをステージングする
私は大体、ステージングの前にステータス(git status)や差分(git diff)の確認を行っていますが割愛します。(変更されたファイルの状態を確認すること)ターミナル.git add .add .(ドット)で全ての変更されたファイルをステージングします。
この場合はRails newで作成された全ファイルですね!ターミナル.git commit -m "first commit"上のコマンドで、変更を記録します!
commitの後ろの -m はオプションであり、コメントを残すためのオプションです!
commitする際は必ずコメントを残すことが決められているので、コメントはどういう変更したのかが理解できるように追加しましょう次はリモートリポジトリへpush!
GitHubにリモートリポジトリを作成したら
ターミナル.git pushと打つと怒られます。
要はリモートリポジトリの接続先が分からないので教えてあげます。
(怒られついでに下記のコマンドを入力するように求められます)ターミナル.git remote add <name> <url>実際のコマンドっぽく書くと↓
ターミナル.git remote origin https://github.com/×××これでOK
あとは下記のコマンドでpushされる。ターミナル.git push -u origin master初回だけは上記のコマンドを使用するが2回目以降はgit pushだけでOK!
ブランチを切ったりする場合も同じです。今回はここまでとします。
あくまで、自分用の忘備録として書いていますが、
ご覧いただきありがとうございました!
- 投稿日:2020-09-26T00:38:10+09:00
Githubで'Untracked files'がどうにも消えない時の対応
状況
作業していたローカルブランチでの変更を無き物にしたい。
やったこと
git checkout -- .
→Untracked filesは消えません次にやったこと
git co master
でmasterブランチに切り替え。git branch -D branch名
でブランチの削除→まだまだUntracked filesは消えません。その次にやったこと
git fetch origin
からのgit merge origin/master
でリポジトリから取得しての上書き→まだまだUntracked filesは消えません。そのまた次にやったこと
git clean -dfn
→git clean -df
したときの未追跡の変更差分(Untracked files)がどうなるかの確認。git clean -df
→ ようやくUntracked filesは消えました。