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 init
リモートリポジトリの複製
リモートリポジトリを複製して、リポジトリを作成する場合は、次のコマンドを実行します。
git clone <リモートリポジトリ> <出力ディレクトリ>
カレントディレクトリの配下にディレクトリが作られ、リポジトリが複製されます。出力ディレクトリを省略した場合は、リポジトリ名と同じディレクトリ名になります。
Windows環境でリモートリポジトリを指定する際に\
を使う場合は次のようにエスケープする必要があります。
- ローカルディレクトリ
git clone C:\\repos\\repo.git
- ネットワークドライブ
git clone \\\\share\\group\\git\\repos\\repo.git
よくある
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