なかなかどうして、この有様よ。

へたれ系PG/SEの技術系メモ+育児日記。

Gitでの各操作メモ。

業務でGitについて調べたので、自分なりにまとめた内容を残しておこうと思います。
実際に使ったわけではないため間違ってるかもしれないので、参考にする際は書いてあることを全部鵜呑みにせずご自分で判断してご利用ください。

Gitリポジトリのセットアップ

  1. Gitリポジトリを新規作成
    $ git init
  2. ローカルリポジトリを作成
    $ git init [リポジトリ名]
  3. リモートリポジトリ(中央リポジトリ)の作成
    $ git init --bare --shared
  4. リモートリポジトリからローカルリポジトリへの取り込み
    $ git clone [リポジトリ名]
  5. ローカルリポジトリからリモートリポジトリへのクローン
    $ git clone --bare [リポジトリ名]
  6. リモートリポジトリのミラーリポジトリの作成
    $ git clone --mirror [リポジトリ名]
    ミラーリポジトリ$ git remote update
  7. 最近実行されたコミットコミット履歴のみをクローン作成
    $ git clone --depth=1 [リポジトリ名]

git initとgit cloneの違い

git clonegit initに依存しており、$ git cloneを行うと内部で$ git initを実行してから既存リポジトリをコピーしている。

Gitリポジトリへの変更内容の登録

  1. ファイルのステージング(インデックスに追加)
    $ git add [ファイル名]
  2. ステージングされたファイルのコミット
    $ git commit [ファイル名]
  3. ステージングと同時にコミット
    $ git commit -a [ファイル名]
  4. 直前のコミットに今回のコミットを含める
    $ git commit --amend [ファイル名]
  5. 直前のコミットメッセージを変更する
    $ git commit --amend
  6. コミットされていない変更を別領域に保存して作業コピーから取り消す
    $ git stash [ファイル名]
  7. コミットメッセージのフォーマット例

    1行目 :変更内容の要約(タイトル、概要)
    2行目 :空行
    3行目以降:変更した理由(内容、詳細)

リモートでの作業

  1. データをリモートリポジトリから取得する
    $ git fetch
  2. フェッチしてリモートブランチの内容を現在のブランチにマージ
    $ git pull
  3. ローカルとリモートをマージし、リモートへ変更を反映させる
    $ git push

ブランチについて

  1. ブランチの作成(のみ)を行う
    $ git branch [ブランチ名]
  2. ブランチの切り替え
    $ git checkout [ブランチ名]
  3. 分岐した履歴を統合して元に戻す
    $ git merge [マージ先ブランチ名]
  4. ブランチを切り替えてマージ
    $ git merge [マージ元ブランチ名] [マージ先ブランチ名]
  5. ブランチを新規作成と同時に切り替える
    $ git checkout -b [ブランチ名]
  6. リポジトリ内のブランチを一覧化する
    $ git branch

masterブランチ/HEADとは

項目 説明
ブランチ 一連のコミットの先端を表すポインタ。
master デフォルトのブランチ名で大方はメインのブランチのこと。
HEAD 今どのブランチで作業しているのかを保持する特別なポインタ。

マージの際の競合(コンフリクト)

$ git statusで状態を確認して手動でマージを行い、$ git addしてステージングする。
すべてのファイルがステージングできたら、$ git commitを行ってマージコミットを完了させる。

マージの取り消し

  1. マージが未着手で、マージを取りやめるとき
    $ git merge --abort
  2. 競合を解消するために作業ディレクトリ内で変更した内容(コミット済み)をすべて取りやめるとき
    (取り消されたコミットがあったことも履歴に残らない)
    $ git reset --hard HEAD
  3. 競合を解消するために変更した内容(コミット済み)を元に戻すとき
    (取り消した履歴が残るが、取り消したマージコミットに含まれていた変更を再度マージすることはできない)
    $ git revert [コミットID]

ブランチの操作

  1. リポジトリ内のブランチを一覧化する
    $ git branch
  2. リポジトリ内の現在作業中のブランチへマージされているブランチを一覧化する
    $ git branch --merged
  3. リポジトリ内現在作業中のブランチへマージされていないのブランチを一覧化する
    $ git branch --no-merged
  4. マージ済みブランチの削除
    $ git branch -d [ブランチ名]
  5. ブランチの強制削除
    $ git branch -D [ブランチ名]

リベース

  1. リベースを行う
$ git checkout [リベース元のブランチ名]  
$ git rebase [リベース先のブランチ名]  

git rebaseとgit mergeの違い

git rebasegit mergeと同様に、変更を1つのブランチから別のブランチに統合するためのコマンド。
マージはマージ元のブランチはけして変更されないが、ブランチに無関係なマージコミットが発生するため、履歴が乱雑になる可能性がある。
リベースはリベース先のブランチの先頭から新しいコミットのすべてをリベース先のブランチに取り込むことができるが、リベース元のブランチの内容が再書き込みされ、いつその変更がリベース先のブランチに取り込まれたのかわからなくなる。