Gitでバージョン管理!基本的な使い方解説

1年程個人でGit(git for windows)を使ってみて、基本的な使い方はできるようになってきた。なので、ここらで纏めておこうと思います。

設定

Gitインストール後、最低限、以下の設定を行います。

ユーザーを設定する

git config --global user.name <ユーザー名>

改行コードの扱いを設定する

改行コードをどのように扱うか設定します。Windowsではtrue、Unixではinputが推奨されているようです。私はWindowsでもソースコードの改行にLFを使っているのでinputにしています。

チェックアウト時 コミット時
true 改行コードをCRLFに変換 改行コードをLFに変換
input 改行コードを変換しない 改行コードをLFに変換
false 改行コードを変換しない 改行コードを変換しない
git config --global core.autocrlf true|input|false

設定の確認

git config --global|--system|--local <設定名>

なお、設定ファイル(.gitconfig)は通常、以下の場所にあります。
C:\Users\ユーザー名\.gitconfig

Gitの構成

Gitの構成は次のようになっています。

名称 内容 主な物理的配置
リモートリポジトリ pushした位置 クラウド・GitHub・社内サーバなど
リポジトリ コミットされた位置 作業マシン
ステージ コミット前の状態
インデックスともいう
作業マシン
ワーキングツリー ローカルにある実際に作業しているディレクトリ 作業マシン
Gitの状態 Gitの状態

個人で管理したいだけであれば、リモートリポジトリが無くても利用可能です。

リポジトリの作成

リポジトリを作成する

リポジトリとしたいディレクトリで次のコマンドを実行します。.gitディレクトリが生成されます。

git init

リモートリポジトリの複製

リモートリポジトリを複製して、リポジトリを作成する場合は、次のコマンドを実行します。

git clone <リモートリポジトリ> <出力ディレクトリ>

カレントディレクトリの配下にディレクトリが作られ、リポジトリが複製されます。出力ディレクトリを省略した場合は、リポジトリ名と同じディレクトリ名になります。
Windows環境でリモートリポジトリを指定する際に\を使う場合は次のようにエスケープする必要があります。

  • ローカルディレクトリ
    git clone C:\\repos\\repo.git
  • ネットワークドライブ
    git clone \\\\share\\group\\git\\repos\\repo.git
What's mean origin?
よくあるoriginですが、これはリモートリポジトリ名になります。本記事ではリモートリポジトリ名は全てoriginとしています。

状態を確認する

変更されたファイルやステージング状態のファイルを確認するコマンドです。この後何をすべきかヒントも出力してくれるため、使う頻度が高いコマンドです。

git status

以降は各状態ごとの基本的な操作です。

ワーキングツリー

ワーキングツリーの変更をステージに追加する(ステージング)

  • ファイル指定
    ファイルを新しく追加する場合も同じコマンド
    git add <ファイル名>
  • 変更があるファイル全て
    新規ファイルも一緒に追加される
    git add .
git addでステージに上げたファイルをワーキングで編集して、再度git addした場合、ステージ上のファイルは上書きされます(最新のファイルのみ保持)。

ファイルを削除する

ファイルはGit管理から除外され、物理ファイルも削除されます。

git rm <ファイル名>

ファイルを削除せずに、Gitの管理から外す

Gitの管理からファイルを削除せずに除外するには、--cachedを指定します。

git rm --cached <ファイル名>

ファイル名を変更する

git mv <旧ファイル名> <新ファイル名>

ワーキングツリーの変更を元に戻す

前回コミットした状態まで戻す

ワーキングツリーのファイルを前回コミットした状態に戻します。ステージングも解除されます。

  • 特定のファイルを戻す
    git checkout <ブランチ名> <ファイル名>
  • ワーキングツリーの変更を全て元に戻す
    git reset --hard HEAD
    • 変更は全て消える
    • 追加ファイルも消える
    • 削除したファイルは復元される

ステージングした状態まで戻す

ワーキングツリーのファイルを前回ステージングした状態まで戻します。ファイルをステージングしていない場合は、前回コミットした状態まで戻します。

git checkout <ファイル名>

または

git restore <ファイル名>

すべてのファイル

git checkout .

または

git restore .

ステージ

コミットしてリポジトリに登録する

  • ステージの内容を全てコミット
    git commit -m 'コメント'
  • ステージにあるファイルを指定してコミット
    git commit <ファイル名> -m 'コメント'

ステージングを取り消す

ファイルの変更は維持されます。

ファイル指定

git reset HEAD <ファイル名>

または

git restore --staged <ファイル名>

すべてのファイル

git restore --staged .

リポジトリに未だコミットしていない(コミットが0件)の場合は次のコマンドを使用します。

git reset <ファイル名>

すべてのファイル

git reset HEAD

リポジトリに未だコミットしていない(コミットが0件)の場合は次のコマンドを使用します。

git reset

リポジトリ

リモートリポジトリにローカルリポジトリのコミットを反映する

  • ブランチ指定
    git push origin <ブランチ名>
  • 全てのブランチ
    git push --all origin

リモートリポジトリをローカルリポジトリへ取得・マージする

git pull origin <ブランチ名>

参考:pull実行時の動き

ローカルの状態 編集ファイルのマージ
コミット済みあり 自動マージする。コンフリクトの可能性あり
ステージングあり Error. "Your local changes to the following files would be overwritten by merge”
ローカル編集あり Error. "Your local changes to the following files would be overwritten by merge”

リモートリポジトリをローカルリポジトリへ取得する

git fetch origin <ブランチ名>

その後自分でマージします。

git merge origin/<ブランチ名>

コミットの取り消し

git resetを使うとコミット自体を取り消せます。(履歴からも消える)

  • ローカルの変更を全て破棄する
    ローカルリポジトリを特定のコミットまで戻す。戻すコミット位置はタグやコミットのハッシュ値(先頭数文字でもOK)など。HEAD^で直前のコミットを指定
    • ローカルの変更は全て破棄される
    • 追加ファイルも破棄される
      git reset --hard <戻すコミット位置>
  • ローカルの変更を維持する
    ローカルリポジトリを特定のコミットまで戻す
    • ローカルの変更(ワーキング)は維持される
    • ステージングは解除される
      git reset <戻すコミット位置>
  • 直前のコミットを取り消してステージングに戻す
    • 取り消したコミットファイルはステージング状態になる
      同一ファイルがステージング状態ならそちら(最新)を優先
    • ローカルの変更(ワーキング)は維持される
    • ステージング状態も維持される
      git reset --soft HEAD^
  • 直前のコミットを取り消してワーキングツリーに戻す
    • ローカルのファイルは維持される
    • ステージングは解除される
      git reset HEAD
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です