リポジトリ
貯蔵庫の意味で、ディレクトリの変更を記録しておく場所。ローカルとリモートがある。
コミットしないファイルの設定(全ディレクトリ共通)
$ git config --global core.excludesfile ~/.gitignore_global
configで設定
--global core.excludesfileでコミットしないファイルは?
~/.gitignore_globalでそれはここにかいてありますよ
$ echo ".DS_Store" >> ~/.gitignore_global
echo ".DS_Store" でDS_Storeを記載
「>>」でファイルに追記
~/.gitignore_global でそこに
stageとunstage
stageはコミット(リポジトリに記録)するファイルをまとめている目録てきなもの。stage(目録)が空の状態でコミットしても、コミットするものがないと見なされてエラーになってしまう。
$ git add ファイル名
でそこにファイルを追加することができる。変更ファイル全てを追加したい場合は
$ git add .
もし間違えてstage(目録)に追加されてしまったファイルを目録から消したい場合は
$ git rm --cached ファイル名
で目録から削除できる。これをunstageという。
コミット
$ git commit -m コミットメッセージ
「-m」オプションをつけずにコミットすると自動的にviエディタが起動される
コミットログの確認
$ git log
親子関係を表示する場合は
$ git log --graph
logを抜ける場合は「q」ボタン
$ git config --global alias.graph "log --graph --date-order --all --pretty=format:'%h %Cred%d %Cgreen%ad %Cblue%cn %Creset%s' --date=short"
gitのログを見やすく表示する
ファイルの削除
$ git rm ファイル名
ファイルの削除と削除履歴のstageへの追加が同時にできる
手動で削除しそれをstageへあげたいときも同じ操作
ファイルのリネーム
$ git mv 変更前 変更後
これで名前の変更と変更履歴のstageへの追加ができる。
手動でファイルをリネームした場合のstageへの追加は
$git rm 変更前
$git add 変更後
となる
ファイルの移動
ファイルのリネームと同じくgit mvを使う
$git mv ファイル名 変更後の場所
// 例
// $git mv cat.txt animals/cat.txt
ブランチの操作
ブランチとは?
今の状態(変更履歴の位置)を示すポインタ。ブランチを作成するということは新たに変更位置を記録したポインタを作成するということ。
HEADとは?
今のディレクトリの状態はどのブランチに属するのかを表示している。
HEADの記載のあるブランチが今のディレクトリの状態。checkoutはHEADを移動する操作。
ブランチの確認
$ git branch
ブランチの作成
$ git branch ブランチ名
ブランチの切り替え
$ git checkout ブランチ名
ブランチを切り替えることで管理ディレクトリの内容もそのブランチの内容に変更される。
$ git checkout -b ブランチ名
で新しくブランチを作成してそこに切り替えが可能
さらに
$ git checkout -b 作成ブランチ名 分岐元ブランチ名
とすると今いるブランチではないブランチよりブランチを分岐させ、さらにそのブランチに移動することが出来る。
ブランチの削除
$ git branch -d ブランチ名
マージした後などに行う。ブランチを削除してもブランチを分けて変更した履歴は消えないので大丈夫。(ブランチはあくまでポインタという意識を忘れずに)
マージの操作
統合後残したいほうにcheckoutした後で
$ git merge 結合するブランチ名
vimでマージメッセージを入力してくれと出るがそのまま:wqでもおけい
Fast-forwardマージ
masterブランチから新たにブランチを切りそちらで編集してコミットからマージを行った時、まだmasterブランチに変更がない場合はFast-forwardマージとなる。なぜかというと、としてはmasterの変更は新たなブランチだけなので新しいブランチの位置にポインタのみ移動すればマージしたことと同じになるので。
もしfast-fowrdマージをやりたくない場合は
git mearge --no-ff ブランチ名
とする「--no-ff」オプションをつけることでfast-forwardをさせないこともできる。その場合は新たなブランチの先にマージされたmasterブランチができるイメージ。同じ場所にブランチがない。
マージのコンフリクト
マージ作業中にコンフリクトが発生し、gitが自動的に判断できない場合はエラーとなる。
その場合コンフリクトが発生したファイルに
<<<<<<< HEAD
競合している文章1
=======
競合している文章2
>>>>>>> マージ先ブランチ名
という記載が追加される<
>>マージ先ブランチ名までのコードがマージ先の文章。どちらかを残し<<< === >>>を消せばgitはコンフリクトを解消したとみなすその後git add コフクリクトファイル、git commitを行えばマージは解消される。
前のコミットに戻る
$ git reset --hard <戻りたいコミットのid>
で前のコミットに戻れる(ブランチ(ポインタ)を移動出来る)
前のコミットを変更
$ git commit --amend
前のコミットの内容をやり直すことができる
リベース
コミットの改変(歴史の改変)
$ git rebase リベース先ブランチ
クローン
リポジトリ(変更履歴)のみクローン(作業ファイルはコピーしない)
$ git clone --bare クローン元ディレクトリ クローン先ディレクトリ
--bareをつけなければ、クローン元のディレクトリのまるまるコピーとなる。
リモートリポジトリの設定
リモートリポジトリの作成
$ git clone --bare コピー元のディレクトリ リモートリポジトリ名(末尾に.gitをつけるのが慣習)
これで今あるリポジトリのコピーとしてのリポジトリが作成される。(作業ディレクトリはなしのリポジトリ)これをリモートリポジトリとしてつかう
リモートリポジトリの登録
cloneしたリポジトリをリモートリポジトリとして登録しなくてはならない。それは
$ git remort add リポジトリディレクトリ名 場所
で行う
リモートリポジトリのコミット・ブランチの取得(git fetch)
リモートリポジトリのコミット・ブランチを取得するにはfetchを使う
$ git fetch リモートブランチ名
fetchにより取得されたブランチはあくまでリモートリポジトリのものなのでこちらでチェックアウトすることはできない。あくまで更新情報の反映はpushを使う。
リモートリポジトリのブランチを追跡するようブランチの設定を行う
git remort、git fetchでリモートリポジトリの登録、リモートブランチ、コミットの取得を行った上で、ブランチの追跡の設定をする。
$ git branch --set-upstream-to=追跡するリモートブランチ名 追跡させる手元のブランチ名
ローカルから新たにブランチを作成する場合は
$ git branch 新しいブランチ名 追跡するリモートブランチ名
ローカルで作ったブランチをリモートへ反映させる
まずローカルのブランチの複製。もし名前が一緒の場合は:以降は省略可能。その後リモートのブランチを追跡するよう設定する。
$ git push リモート名 複製する手元のブランチ名 : リモートに作成するブランチ名
or
$ git push リモート名 複製する手元のブランチ名
リモートのブランチを削除する
前述のブランチの追加の形を継承している「:」の前が「空白」となっているのがポイント
git push orign : 削除するブランチ名
#### ローカルの変更をリモートに反映する
反映したいブランチに移動し、
git push
前提としてリモートの登録、リモートブランチの追跡の設定を行っておくこと
### ユーザー情報の設定
//名前
$ git config user.name 名前
//email
$ git config user.email メールアドレス