プログラミング備忘録【Ruby on Rails】

初学者として日々学んだことや発見をいつでも引き出せるようブログにまとめてみた。初学者のため間違った説明があった場合、コメントいただけると嬉しいです。

GitHubに関して調べてみた!編集中!!

githubの環境構築

*対象Mac
1.gitのインストール

$brew install git

2.作業ディレクトリを作成&移動

$mkdir ディレクトリ名
$cd ディレクトリ名

3.リポジトリを初期化する

$git init

4.自分の情報をgitに設定

$git config --global user.name “名前”
$git config --global user.email “メールアドレス”

5.GitHubに登録
https://github.com/でアカウント作成
6.サイト上でリモートリポジトリを作成
7.sshキーを作成(これがないと通信できない)
⑴キーを作成

$ssh-keygen -t rsa -C “メールアドレス”

sshキーの中身をコピー

$cat ~/.ssh/id_rsa.pub

⑶サイトのリポジトリ設定画面へいき、ペーストして登録(titleはなんでも可)
⑷接続の確認

$ssh -T git@github.com

8.ローカルとリモートを繋げる
⑴リモートに登録したリポジトリSSHをコピー
⑵リモートリポジトリを登録

$git remote add origin ssh名(ここでssh名を変数originに代入している)

プルリクエストによる開発

GitHubを使うなら最低限知っておきたい、プルリクエストの送り方とレビュー、マージの基本 (1/2):こっそり始めるGit/GitHub超入門(10) - @IT

1.ブランチを切る

$ git checkout sample_branch

2.開発を進め、コミットまで完了させる
3.変更をリモートリポジトリ「origin」の「sample_branch」ブランチに反映

$ git push origin sample_branch

4.GitHub上のリポジトリページを表示
5.masterブランチでプルリクエストを作成する
6.マージを実行
7.リモートリポジトリの「sample_branch」ブランチを削除
8.ローカルリポジトリのマージ

$ git merge sample_branch

9.ローカルリポジトリの「sample_branch」ブランチを削除

$ git branch -d sample_branch

*マージ済みでないローカルブランチを削除する場合
$ git branch -D sample_branch

開発手順1(ローカルでアプリを新規作成する場合)

$rails new アプリ名
1.リポジトリを初期化

$git init

2.ステージング

$git add .

3.慣習的に行う最初のコミット

$git commit -m 'first commit'

4.ブランチを作成し、作成したブランチへ移動

$git checkout -b ブランチ名

5.以下の⑴から⑶を繰り返しながら開発を行っていく
⑴開発
⑵$git add .
⑶$git commit -m 'コミット名'
6.ブランチにプッシュ

$git push origin ブランチ名

7.プルリクエストを出す

$git push origin master

8.プルリクエストの作成
github上で内容を記述
9.マージの実行
github上のマージボタンを押す

開発手順2(クローンからアプリ開発)

1.github上からクローン先のSSHをコピーし、クローンを作成

$ git clone SSH

2.クローン先へ移動

$ cd アプリ名

3.ステージング

$ git add .

4.コミット作成

$ git commit -m 'コミット名'

5.リモート先を変更する場合は、以下を実行

$ git remote set-url origin 変更先のSSH

6.リモート先のブランチへプッシュし、デフォルトのブランチを設定

$ git push origin 元々のブランチ名

7.開発を行うブランチの作成と移動を実行

$ git checkout -b 開発ブランチ

8.開発を行いつつ、コミットを重ねていく
9.開発が完了したら、リモートへプッシュ

$ git push origin ブランチ名

10.github上でプルリクエストを作成
11.マージはリモートと、ローカルと両方行う?

コンフリクトの解決法4つ

1. HEADのコードを削除する
2. マージしようとしているブランチのコードを削除する
3. どちらのコードも採用する(どちらも削除しない)
4. どちらのコードも削除する

特定のファイルをGitHubで公開させない方法

1.作業ディレクトリで以下を実行

$ touch .gitignore

2.gitignoreファイルに管理対象外にしたいファイル名を追記
3.gitignoreファイル自体や関連するファイル名に変更があった場合、github上のキャッシュを一度削除する(gitignoreの変更が反映されないため)

$ git rm --cached ファイル名

4.ステージングからプッシュまで実行

GitHub上で環境変数を扱いたい場合

【Ruby on Rails】GitHubに公開したくない変数や値を隠してpushする方法 - Qiita
1.gemfileにdotenv-rails(環境変数を環境ごとに管理)を追記し、インストール
2.アプリディレクトリ直下に.envファイルを作成し、環境変数を記述
[.env]

例
LOGIN_NAME='noraworld'
LOGIN_PASSWORD='fh328sd9fshkq342bsfhsfuew'

3..gitignoreの対象に追加

/.env

4.値を取り出したい場合は、以下のように記述

ENV['LOGIN_NAME']
ENV['LOGIN_PASSWORD']

gitコマンド

・コミット履歴の確認
$ git log
・リポジトリの状態確認(ステージングやコミットの状態)
$ git status
<span style="font-size: 80%">*Untracked files:	ステージング前の変更ファイル
*Change to be committed:	commit待ちの状態</span>
・変更内容の確認(+が追加箇所、-が削除箇所)
$ git diff
・ブランチの確認
$ git branch
・マージ済みのローカルブランチのみ削除
$ git branch -d ブランチ名
・マージ済みでないローカルブランチでも削除
$ git branch -D ブランチ名
・ユーザー登録内容の確認
$ git config --global --list
・gitのremote urlを変更
$ git remote set-url origin 新たなurl
・リモート先の確認
$ git remote -v
・remoteの削除
$ git remote rm origin

ローカルでの変更内容をすべて取り消す

gitでいろいろ取り消したい - Qiita

$ git checkout .
新規追加したファイルに関しては削除されないので、完全に元に戻したい場合以下を実行
$ git clean -df .

過去の特定のコミットを指定して新規ブランチにチェックアウトする

$ git checkout -b [新規ブランチ名] [チェックアウトしたいコミットのID]
*[]は不要です。

コミットメッセージの書き方

*その他の取り消しに関しても以下参考になるよ
Gitのコミットメッセージの書き方 - Qiita

例:
$ git commit -m '[fix]削除フラグが更新されない不具合の修正'

fix:バグ修正
hotfix:クリティカルなバグ修正
add:新規(ファイル)機能追加
update:機能修正(バグではない)
change:仕様変更
clean:整理(リファクタリング等)
disable:無効化(コメントアウト等)
remove:削除(ファイル)
upgrade:バージョンアップ
revert:変更取り消し

コミット内容をまとめる

1.まとめたいコミットの範囲を指定(例だと最新のコミット4つ分)

$ git rebase -i HEAD~コミット数
例
$ git rebase -i HEAD~4

2.まとめたいコミットのpickをsに変更し、順序を変更したい場合は行を入れ替える

pick 8145f1c Fix screen rotation problem
pick d90db4a v1.2.4
pick 646bf79 Fix screen rotation problem
pick 71a6940 v1.2.4

# Rebase ed7420a..71a6940 onto ed7420a
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

変更例

pick 8145f1c Fix screen rotation problem
s 646bf79 Fix screen rotation problem
pick d90db4a v1.2.4
s 71a6940 v1.2.4

#省略

3.この場合、コミットメッセージを統合するためのエディタが2回開きますので、必要に応じて編集
4.コミットの確認

$ git log -2

5.push(コミットハッシュが変わるので -f が必要)

$ git push -f

rebase -i でコミットをまとめる - Qiita

コミットを取り消す

【Git入門】resetでコミットを取り消す方法を解説! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

・ステージングをリセット
$ git reset

・コミットコマンドを打ったことをなかったことにしたい場合
$ git reset --soft 取り消しするコミットコード
例:直前のコミットを取り消す場合
$ git reset --soft HEAD^

・前のコミットからの全ての変更内容及びステージングエリアへの移動も取り消す場合
$ git reset --hard 取り消しするコミットコード

・誤ってresetしてしまった場合
$ git reset --hard ORIG_HEAD

pushしたコミットメッセージの変更

・メッセージを変更したいコミットの範囲を指定(例だと最新のコミット5つ分)

$ git rebase -i HEAD~5

・編集画面が表示されるので、変更したいコミットのpickをeに編集し、保存

pick c41badb hogeeeeeeeeeeeeee.md追加 
pick 0c8384b fuga.md追加 
pick 2dddef0 piyo.md追加 
pick cfec910 mmm.md追加 
pick 7933f20 nnn.md追加 

# Rebase f0ebed6..7933f20 onto f0ebed6 (5 commands) 
# 
# Commands: 
# p, pick  = use commit
# r, reword  = use commit, but edit the commit message
# e, edit  = use commit, but stop for amending
# s, squash  = use commit, but meld into previous commit
# f, fixup  = like "squash", but discard this commit's log message
# x, exec  = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop  = remove commit
# l, label  = label current HEAD with a name
# t, reset  = reset HEAD to a label
# m, merge [-C  | -c ]  [
# ]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c  to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out ~

変更例

e c41badb hogeeeeeeeeeeeeee.md追加 
pick 0c8384b fuga.md追加 
pick 2dddef0 piyo.md追加 
pick cfec910 mmm.md追加 
pick 7933f20 nnn.md追加 

#省略

・以下の表示に切り替わるので、編集する場合は「git commit --amend」、次のコミットに進む場合は「git rebase --continue」

Stopped at c41badb...  hogeeeeeeeeeeeeee.md追加
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

・変更保存後以下を実行すると編集が終了する

$ git rebase --continue

・push(コミットハッシュが変わるので -f が必要)

$ git push -f