Gitのおさらい

Pocket

Gitのおさらい

  • パッチモード
  • 空のディレクトリを管理
  • 差分を確認する
  • 過去のコミットを操作する

パッチモード

パッチモードとは、ワーキングツリーの変更のあったファイルの差分を表示してくれて、その変更を追加するかどうかを選べるモード。
あるファイルを変更したけれども、その変更を一つのコミットにしたくないときに使えます。
パッチモードを立ち上げるコマンドは以下です。

$ git add -p

このコマンドを叩くと差分を表示してくれて下の方に

Stage this hunk [y,n,q,a,d,/,s,e,?]?

といったものが出てきます。
ここで、ハンクに追加するかどうかを選べます。
入力に対する挙動は、以下の表を参考に。

type action
y その変更をハンクに追加
n その変更をスキップ
q パッチモード終了
a 以降の変更をハンクに追加
d 以降の変更を拒否
/ 検索
s 表示されている差分を分割する
e エディタを起動し手動で編集
? ヘルプを表示

空のディレクトリを管理

Gitではディレクトリを管理しないけれども、空のディレクトリを残したいときは、そのディレクトリに .gitkeep という名前の空のファイルを作成すると空のディレクトリをGitに残しておくことができる

差分を確認する

差分を確認するには、大きくわけて3種類。

  • ステージングエリアとワーキングツリーの間
  • ステージングエリアとリポジトリの間
  • ステージングエリア&ワーキングツリーとリポジトリの間

一つ目のステージングエリアとワーキングツリーとの間の差分を確認するには下記のコマンド

$ git diff

オプションもパラメータのなにも付けないで実行すると、ステージングエリアとワーキングツリーとの差分を得れます。

二つ目のステージングエリアとリポジトリとの間の差分を確認するには下記のコマンド

$ git diff --cached

cachedオプションを付けて実行すると、ステージングエリアとリポジトリとの間の差分を得れます。

三つ目のステージングエリア&ワーキングツリーとリポジトリの間の差分を確認するには下記のコマンド

$ git diff HEAD

HEADをパタメータに渡して実行すると、ステージングエリア&ワーキングツリーとリポジトリの間の差分を得れる。
ちなみに、 HEAD というのは、現在のブランチの最新のコミットを表すキーワードのこと。

表にまとめると

Case コマンド
addする前には $ git diff
addしたものがある場合 $ git diff –cached
commitしていないものとリポジトリの間を確認したいとき $ git diff HEAD

コミットの修正

  • 直前のコミットの修正
  • 特定のコミットを取り消す
  • 変更をなかったことにする

直前のコミットの修正

直前のコミットを訂正する場合は、ファイルを修正し変更をステージして、コミットするときに –amend オプションをつける。

$ git commit -a --amend

コミットメッセージを変更せずに –amend オプションを使うには

$ git commit -C HEAD -a --amend

特定のコミットを取り消す

コミットをなかったことにしたいときには、 revertコマンド を使う。

$ git revert [コミットハッシュ]

パタメータに与えたコミットハッシュに対応するコミットが取り消されて、その取り消したというコミットが作成される。
すぐにコミットされてほしくないときや、revertコマンドをコミットせずに連続して行いたい場合は、 -n オプションをつける。

$ git revert -n [コミットハッシュ]

連続してrevertコマンドを実行するときは、直近のコミットから順番にrevertしていく方が、競合が起こらないので無難である。

変更をなかったことにする

パスワードなどの情報を間違ってコミットしてしまったとき、リポジトリから完全に消し去りたいときは、先ほどのrevertコマンドではできない。
しかし、 resetコマンド を使えばコミット自体をなかったことにし、指定したコミットで行われた変更をコミット前の状態に戻すことができる。
例えば、直前のコミットをなかったことにしたい場合は

$ git reset --hard HEAD

このコマンドを実行する。
–hard をつけるとワーキングツリーも元の状態に戻してくれる。
ワーキングツリーは、現在の状態のままに残して、コミットだけをなかったことにしたい場合は

$ git reset --soft HEAD

–soft オプションを付けます。
例で示したコマンドのパラメータのHEADの代わりにコミットハッシュを与えるとそのコミットの前の状態にまで戻すことができる。

*このresetコマンドは、revertコマンドとは違い、resetコマンドを使用したら元に戻すことはできないので、注意が必要です。
 安全にコミットの変更を戻したい場合は、revertコマンドを使う方が無難です。

Pocket

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>