T_Y_CODE

プログラミング学習記録

学習記録 6日目

6日目の学習記録をまとめていきます。

学習計画

  • Udemy講座 もう怖くないGit!チーム開発で必要なGitを完全マスター CHAPTER 4-6
  • Linux標準教科書 1, 3章
  • リーダブルコード 11章

学習内容

Udemy講座 もう怖くないGit!チーム開発で必要なGitを完全マスター CHAPTER 4-5

  • ファイルの変更を取り消すには以下のコマンドを使用する。
    • ブランチの変更もcheckoutコマンドを使う。混合しないようにファイルの変更には--を付ける。
    • このコマンドを使用するとステージの情報をワークツリーへ反映させている。
$ git checkout -- <ファイル名>
$ git checkout -- <ディレクトリ名>
$ git checkout -- . // すべてのファイルの変更を取り消す
  • ステージに追加した変更を元に戻したい時は以下のコマンドを使用する。
    • ステージ上の変更が取り消されるだけなのでワークツリー上の変更は取り消されない。
    • リポジトリからステージに情報を反映させている。
    • HEADは最新のリポジトリの情報のこと。
$ git reset HEAD <ファイル名>
$ git reset HEAD <ディレクトリ名>
$ git reset HEAD . // すべてのファイルの変更を取り消す
  • ここでgit statusで出力された文章と教材では異なる箇所がありました。
$ git add <ファイル名>
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   <ファイル名>
  • git reset HEADではなくgit restore --stagedの使用を推奨しているようです。調べてみました。

qiita.com

  • Git 2.23.0からの新コマンドらしいです。記事によれば
    • ブランチの変更はgit switch, ファイルの変更はgit restoreに変更された。checkoutはそのまま使用可能。この変更は試験的なもので無くなる可能性もあり。
  • とのこと。"Experimental alternatives(実験的な代替手段)"とのことなので今まで通りcheckoutとreset HEADを使っていこうと思います。
  • 直前のコミットを修正したい時は以下のコマンド使用します。
    • リモートリポジトリにpushしたローカルリポジトリには使用してはいけない。pushしてしまったらもう一度新しいコミットをすること。
$ git commit --amend
  • 設定しているリモートリポジトリの情報を表示するには以下のコマンドを使用する。
$ git remote
$ git remote -v // URLを表示
  • リモートリポジトリの追加は以下のコマンドを使用する。リモートリポジトリは複数登録が出来る。
$ git remote add <リモート名> <リモートURL>
  • リモートから情報を取得しするには2種類の方法がある。
  • フェッチを使用した情報取得は以下のコマンドを使用する。
$ git fetch <リモート名>
// remotes/リモート/ブランチ に情報が保存される。
// 情報をワークツリーに反映させるには
// git merge <リモート名>/<ブランチ名>
  • フェッチからマージまでを一度にやりたい時はpullコマンドを使用する。
$ git pull <リモート名><ブランチ名>
// リモート名がorigin, ブランチ名がmasterの場合省略可
  • 基本的にfetchを使用することを推奨。pullは挙動が特殊。今のワークツリーと違うブランチをgit pullすると違うブランチの内容がワークツリーにmergeされてしまう。pullは慎重に使うこと。
  • git remote -vより詳しい情報を見たい場合は以下のコマンドを使用する。
$ git remote show <リモート名>
  • リモート名の変更をするには以下のコマンドを使用する。
$ git remote rename <旧リモート名> <新リモート名>
  • リモートを削除するには以下のコマンドを使用する。
$ git remote rm <リモート名>

Udemy講座 もう怖くないGit!チーム開発で必要なGitを完全マスター CHAPTER 6

  • ブランチとは平行して複数機能を開発するための仕組み
    • 例)Aさんがヘッダを修正, Bさんがレコメンドを修正など...
  • ブランチはコミットを指したポインタ。
  • HEADは今自分が作業しているブランチを指している。
  • commitすると自分が作業しているブランチは最新のコミットを指すようになる。
  • ブランチのファイルの中身はコミットのファイル名が記載されている。
  • ブランチを新規追加するには以下のコマンドを使用する。
$ git branch <ブランチ名>
// ブランチの切り替えはされない
$ git branch //全てのブランチを表示
$ git branch -a //(リモートを含めた)全てのブランチを表示
  • ブランチを切り替えるには以下のコマンドを使用する。
$ git checkout <ブランチ名>
$ git checkout -b <ブランチ名>
// -bでブランチの作成も同時に行う
  • マージをするには以下のコマンドを使用する。マージをすると現在いるブランチをベースにマージするブランチんおコミットを統合し、新しいコミットを作成する。
$ git merge <ブランチ名>
$ git merge <リモート名/ブランチ名>
  • マージには3種類ある。
    • Fast Foward: ブランチが枝分かれしていない場合はブランチのポインタが前に進むだけになる。
    • Auto Merge: 基本的にはこのマージになる。マージするブランチの内容を現在のブランチに取り込み新しいコミットを作成する。この作成されたコミットファイルのことをマージコミットといい、親のコミットが2つある。
    • Conflict: 同じファイルの同じ行に対して異なる編集を行った時発生する。コンフリクトが起きたファイルの修正が必要になる。
  • コンフリクトを起こさないためには
    • 複数人で同じファイルを変更しない。
    • pullやmergeする前に変更中のファイルをcommitやstashしておく。
    • pullするときはpullするブランチに移動してからpullする。→fetchとmergeに分けてやった方がいい。
  • ブランチ名を変更するには以下のコマンドを使用する。
$ git branch -m <新しいブランチ名>
// -mはmoveの略
  • ブランチを削除するには以下のコマンドを使用する。
$ git branch -d <ブランチ名>
// -dはmasterにマージされていないブランチは削除出来ない。
// 強制削除は-Dを使用。
  • masterブランチはリリース用ブランチにする。開発はトピックブランチを作成して進めるのが基本。

Linux標準教科書 1章

  • ソフトウェアには基本ソフトウェアと応用ソフトウェアがある。
    • 基本ソフトウェアとはOperating System(OS)のこと。応用ソフトはその上で働くアプリケーションを指します。
  • 基本ソフトウェアの大きな役割の1つは各応用ソフトウェアが使用する共通部品の提供です。
  • 基本ソフトウェアには2つの領域がある。
  • シェルには2つの機能がある。1. ユーザーの入力を受け付けること。 2. シェルスクリプトの実行。(ユーザー入力の自動化)

Linux標準教科書 2章

  • MacOSXUNIXベースでコマンドを勉強する上ではMacOSXで十分なことからこの章はスキップする。

Linux標準教科書 3章

  • 基本コマンドについて学んでいきます。よく使ってるコマンドは知っているので飛ばし読みします。
  • lsコマンドはワイルドカードを使用することが出来ます。
$ ls *.conf
Trolltech.conf   nfsmount.conf   asound.conf
nsswitch.conf   autofs_ldap_auth.conf   ntp.conf
// hosts.のあとに4文字かつ最後の文字がw
$ ls hosts.????w
hosts.allow
  • オプションを同時指定する場合は順不同でハイフンの後に記述を行う。
//ls -a -lと同意
$ ls -la
  • -ltオプションはファイルの更新時刻順にソートを行う。
  • cpオプションは先にコピーだけしてペースト先でペーストすることが可能。-pオプションを使用する。
$ cp foo.bar
$ cd /hoge/
$ cp -p ./
$ ls
foo.bar
$ pwd
/home/penguin
$ mkdir dir1
$ mkdir dir1/dir2
$ mkdir dir1/dir2/dir3
//上記と下記は同意
$ mkdir -p dir1/dir2/dir3
  • rmdirはディレクトリの中身が空でないと削除出来ない。中身がある状態で削除するには-rコマンドを用いる。
$ mkdir directory1 directory2 􏱁􏳪􏱪􏴠􏳟􏰌􏱑􏰸􏰔􏲂􏱃
$ touch directory2/file
$ ls
directory1 directory2
$ rmdir directory1
$ ls
􏰠􏶓􏱋􏰨􏰲􏵰􏵱􏰲􏰣􏰘􏱃directory2
$ rmdir directory2
rmdir: failed to remove `directory2/': 􏳪􏱪􏴠􏳟􏰌􏱑􏰠􏶓􏰲􏰠􏰫􏰬􏰭􏲜􏲝
$ rm -r directory2/
$ ls
  • catコマンドは-nオプションを用いることで行番号を付加して表示出来る。
  • 行数がたくさんあるファイルは少しずつ表示するコマンドmore, lessを用いる。このようなコマンドのことをページャという。(ページャ実行時の操作方法はP49参照)
  • ファイルの検索にはfindコマンドを用います。
$ find /etc/ -name hosts
find: `/etc/pki/CA/private': 許可がありません
find: `/etc/pki/rsyslog': 許可がありません
/etc/sysconfig/networking/profiles/default/hosts
/etc/hosts
/etc/avahi/hosts
  • コマンド自体のパスはwhichコマンドを用いて調べることが出来ます。
$ which cat
/bin/cat
  • 各コマンドのオプションについては--helpオプションを用いることで調べることが可能。
  • manコマンドを使用することでコマンドのマニュアルを表示出来ます。Mac OSXでも表示出来る。

リーダブルコード 11章

  • コードは1つずつタスクを行うようにする。
  • 複数のタスクを同時に行うとエラーやタイポ, バグがあっても一見してわかりづらくなる。このようなリファクタリングのことをデフラグという。

今日の総括

  • プル, マージ, ブランチについて理解が深まった。Gitの景色が見えてきた気がする。
  • Linuxの基本的なコマンドについては分かっているつもりでいたが知らない知識も多く勉強になった。